ContextMenu 和以编程方式选择一个项目

use*_*946 0 javafx

似乎没有用于以编程方式“选择”ContextMenu 项目的 API?选择我的意思是相当于点击上下键(或将鼠标悬停在项目上)。当显示 ContextMenu 时,我真的只需要选择第一项。我试图在显示菜单时触发向下键事件,但没有发生任何事情......也许我错误地构建了该事件。

Jos*_*eda 6

为了让它工作,我们可以使用一些私有 API。ContextMenuskin( ContextMenuSkin) 使用一个ContextMenuContent对象,作为包含所有项目的容器。

我们只需要为这些项目中的第一个请求焦点。

但是为此我们可以使用一些查找来找到第一个menu-itemCSS 选择器。这必须在舞台显示后完成。

此示例将显示一个上下文菜单,重点放在第一项上:

@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();
        }
    });        
}
Run Code Online (Sandbox Code Playgroud)