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