javafx2には2つの質問があります。
- メニュー項目のツールチップを設定する方法
- メニュー項目のサイズ(幅)の設定方法
答えがあれば教えてください。
両方の質問への回答は、任意のノードをラップしてメニューに配置するCustomMenuItemクラスに直接送信されます。たとえば、次の例では、メニュー内に特定の幅、高さ、およびツールチップを持つ長方形を作成します。
public void start(final Stage stage) throws Exception {
Group root = new Group();
final Menu menu1 = new Menu("File");
MenuBar menuBar = new MenuBar();
menuBar.getMenus().add(menu1);
MenuItem menu12 = new MenuItem("Open");
menu1.getItems().add(menu12);
Rectangle rect = new Rectangle();
rect.setHeight(100);
rect.setWidth(100);
Tooltip t = new Tooltip("A Rectangle ToolTip");
Tooltip.install(rect, t);
CustomMenuItem customMenuItem = new CustomMenuItem(rect);
customMenuItem.setHideOnClick(false);
menu1.getItems().add(customMenuItem);
root.getChildren().add(menuBar);
Scene scene = new Scene(root,800,600);
stage.setScene(scene);
stage.show();
}
Tooltip tooltip = new Tooltip("This is a tooltip");
すでにご存知のように、ツールチップをJavaFXグラフィカルオブジェクトにバインドするfoo
には:
Tooltip.install(foo, tooltip);
この静的ユーティリティでは、提供されたオブジェクトがNodeを拡張する必要がありますが、MenuItemは必要ありません。
ただし、そのCustomMenuItemサブクラスで問題を解決できます。CustomMenuItem Java docから直接引用:
ノードをコンテンツプロパティに割り当てることにより、任意のノードをその中に埋め込むことができるMenuItem。CustomMenuItemは、任意のノードをメニューでより自然に表示しようとします。たとえば、ユーザーがノードの上にマウスを置くと(またはキーボードやその他の代替手段を使用してノードに移動すると)、ホバーが自動的に強調表示されます。
たとえば、通常のMenuItemとまったく同じように表示および動作するCustomMenuItemを作成するには、次のようにします。
CustomMenuItem openMenuItem = new CustomMenuItem(new Label("Open"));
次に、ツールチップをラップされたコンテンツ(ノード)にアタッチできます。
Tooltip.install(openMenuItem.getContent(), tooltip);
CustomMenuItemを他のタイプのノードで使用する場合は、Java doc、特にについてのビットを参照してくださいsetHideOnClick
。ただし、これはトピックから外れています。
MenuItemのサイズを変更することはできませんが、それを許可するノードを使用して、CustomMenuItemでラップすることはできます。
Label closeLabel = new Label("Close");
closeLabel.setPrefWidth(400); // Overly large menu item
CustomMenuItem closeMenuItem = new CustomMenuItem(closeLabel);