打开菜单时,JavaFX 焦点在 TextField 上的变化

Posted

技术标签:

【中文标题】打开菜单时,JavaFX 焦点在 TextField 上的变化【英文标题】:JavaFX Focus change on TextField when opening menu 【发布时间】:2015-11-12 14:10:21 【问题描述】:

请查看以下示例代码。启动应用程序并聚焦其中一个文本字段。现在单击菜单。焦点仍保留在 TextField 上。然而,我们的 TextField 触发了关于失去焦点的价值的沟通。如何实现单击菜单或工具栏项会触发 TextField 上的焦点丢失?

public class FocusApp extends Application


    @Override
    public void start(Stage primaryStage) throws Exception
    
        TextField l_text1 = new TextField("TextField 1");
        TextField l_text2 = new TextField("TextField 2");
        l_text1.focusedProperty().addListener((a,b,c) -> 
            System.out.println("Focus change on TextField 1");
        );
        l_text2.focusedProperty().addListener((a,b,c) -> 
            System.out.println("Focus change on TextField 2");
        );

        MenuBar l_menuBar = new MenuBar();
        l_menuBar.setFocusTraversable(true);
        Menu l_menu = new Menu("_Menu");
        l_menu.getItems().add(new MenuItem("_Item"));
        l_menuBar.getMenus().add(l_menu);
        VBox l_vbox = new VBox(l_menuBar, l_text1, l_text2);
        primaryStage.setScene(new Scene(l_vbox));
        primaryStage.show();
    



    public static void main(String[] args)
    
        FocusApp.launch(args);
    

【问题讨论】:

【参考方案1】:

我想您是在问您希望在用户激活菜单时焦点从文本字段移开。

你可以这样做

l_menu.setOnShowing(e -> l_menuBar.requestFocus());

【讨论】:

以上是关于打开菜单时,JavaFX 焦点在 TextField 上的变化的主要内容,如果未能解决你的问题,请参考以下文章

窗口/舞台失去焦点时的事件

在输入焦点上打开引导下拉菜单

按下选项卡时如何在焦点上打开 select2 下拉菜单

Bootstrap 3下拉菜单在子菜单焦点上更改背景

javafx的选中控件焦点问题

Select2 在焦点文本输入上打开下拉菜单