打开菜单时,TextField上的JavaFX焦点更改

时间:2015-11-12 14:10:21

标签: javafx focus textfield menubar

请查看以下示例代码。启动应用程序并关注其中一个文本字段。现在单击菜单。焦点仍然保留在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 个答案:

答案 0 :(得分:2)

我认为您要求当用户激活菜单时,您希望焦点远离文本字段。

您可以使用

执行此操作
l_menu.setOnShowing(e -> l_menuBar.requestFocus());
相关问题