0
似乎沒有API以編程方式「選擇」ContextMenu項目?通過選擇我的意思是相當於上下鍵(或將鼠標懸停在項目上)。當顯示一個ContextMenu時,我只需要選擇第一個項目。我試圖在顯示菜單時觸發一個關鍵事件,但沒有發生任何事情。也許我錯誤地構造了事件。ContextMenu並以編程方式選擇項目
似乎沒有API以編程方式「選擇」ContextMenu項目?通過選擇我的意思是相當於上下鍵(或將鼠標懸停在項目上)。當顯示一個ContextMenu時,我只需要選擇第一個項目。我試圖在顯示菜單時觸發一個關鍵事件,但沒有發生任何事情。也許我錯誤地構造了事件。ContextMenu並以編程方式選擇項目
爲了得到這個工作,我們可以使用一些私有API。 ContextMenu
皮膚(ContextMenuSkin
)使用ContextMenuContent
對象作爲所有項目的容器。
我們只需要請求關注這些項目中的第一項。
但爲此,我們可以使用一些查找來找到第一個menu-item
CSS選擇器。這必須在舞臺顯示後完成。
這個例子將顯示上下文菜單,焦點位於第一個項目:
@Override
public void start(Stage primaryStage) {
MenuItem cmItem1 = new MenuItem("Item 1");
cmItem1.setOnAction(e->System.out.println("Item 1"));
MenuItem cmItem2 = new MenuItem("Item 2");
cmItem2.setOnAction(e->System.out.println("Item 2"));
final ContextMenu cm = new ContextMenu(cmItem1,cmItem2);
Scene scene = new Scene(new StackPane(), 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
scene.setOnMouseClicked(t -> {
if(t.getButton()==MouseButton.SECONDARY){
cm.show(scene.getWindow(),t.getScreenX(),t.getScreenY());
// Request focus on first item
cm.getSkin().getNode().lookup(".menu-item").requestFocus();
}
});
}
正是我需要的。謝謝! – user2499946 2014-12-06 18:18:24
如何選擇2或n-n項目?我使用這個但不工作(contextMenu.getSkin()。getNode()。lookup(「.menu-item:nnth-child(4)」)。requestFocus() ;) – GOXR3PLUS 2016-05-29 03:27:19
使用'cm.getSkin()。getNode()。lookupAll(「。menu-item」)'獲取所有項目的集合,然後迭代以獲得所需的項目。 – 2016-05-29 10:13:21