2017-02-01 5 views
0

メニューを展開する前に、毎回メニューのサブアイテムを更新したいと考えています。 これは私が試したものです:JavaFX:毎回表示されるメニューのサブメニューを更新する

@FXML javafx.scene.control.Menu menu; 

public void initiallize(){ 
// ... 

this.menu.setOnAction((event) -> { 
       this.menu.getItems().clear(); 
       this.menu.getItems().add(new MenuItem("Hello")); 
       this.menu.getItems().add(new MenuItem("World")); 
       this.menu.getItems().add(new MenuItem("!!!!!")); 
      }); 
} 

それは近いが正しくありません。更新はアイテムをクリックした後にのみ発生します。メニューは展開される可能性がありますが、古い値です。 setOnAction()の代わりにsetOnShown()を使用した試行は、それが表示されている時点で更新が遅すぎるため、機能しませんでした。

修正方法

編集1:

これは動作するようです:

this.menu.getParentMenu().setOnShowing((event) -> { 
        this.menu.getItems().clear(); 
        this.menu.getItems().add(new MenuItem("Hello")); 
        this.menu.getItems().add(new MenuItem("World")); 
        this.menu.getItems().add(new MenuItem("!!!!!")); 
       }); 

は、これが最良の方法ですか(/ ParentMenuにアクセスOワット)より良い解決策があるのですか?

答えて

1

このメニューはMenuBarの子ですか?もしそうなら、あなたはMenuItemsに行くためにメニューの一つを間違いなくクリックしなければなりません。

this.menu.setOnMouseEntered(event -> { 
    this.menu.getItems().add(new MenuItem("Test")); 
}); 

を使用すると、毎回、マウスカーソルがメニュー自体にあるのMenuItemを更新している。これにより:クリックでこれを行うことによって起こる前に、のMenuItemを更新することができます。

関連する問題