4

javafx2には2つの質問があります。

  1. メニュー項目のツールチップを設定する方法
  2. メニュー項目のサイズ(幅)の設定方法

答えがあれば教えてください。

4

2 に答える 2

3

両方の質問への回答は、任意のノードをラップしてメニューに配置する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();
  }
于 2012-12-18T09:03:41.963 に答える
3

1-MenuItemへのツールチップのインストール

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。ただし、これはトピックから外れています。

2-MenuItemのサイズ変更

MenuItemのサイズを変更することはできませんが、それを許可するノードを使用して、CustomMenuItemでラップすることはできます。

Label closeLabel = new Label("Close");
closeLabel.setPrefWidth(400); // Overly large menu item
CustomMenuItem closeMenuItem = new CustomMenuItem(closeLabel);
于 2017-03-27T18:07:18.410 に答える