JavaFX 2.0中MenuBar上的setFocusTraversable行为

时间:2012-03-19 07:29:37

标签: javafx-2

我注意到MenuBar控件上的setFocusTraversable()存在问题。如果我在menuBar对象上调用setFocusTraversable(false),当我从TextField按Tab键时焦点遍历(我可以看到菜单栏突出显示/被选中)到菜单但是事件(changed())没有被触发。如果我在menuBar对象上调用setFocusTraversable(true)并在TextField中按Tab键,焦点不会在视觉上遍历到MenuBar(TextField失去焦点),但事件被触发,另外无法使用Tab或Shift + Tab在TextField上设置焦点。我不确定这是否是我理解的错误或问题。

这是代码。

public class MenuTest extends Application 
implements ChangeListener
{
    MenuBar menuBar = new MenuBar();
    TextField tf1 = new TextField("One");
    public static void main(String[] args)
    {
    Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage)
    {
        Group content = new Group();
        BorderPane paneLayout = new BorderPane();
        final Menu menu1 = new Menu("File");

        menuBar.getMenus().addAll(menu1);
        Menu exit = new Menu("Exit");
        menu1.getItems().add(exit);
        content.getChildren().add(tf1);
        paneLayout.setTop(menuBar);
        paneLayout.setCenter(content);
        Scene scene = new Scene(paneLayout, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();

        menuBar.setFocusTraversable(false);
        menuBar.focusedProperty().addListener(this);
        tf1.focusedProperty().addListener(this);
        tf1.requestFocus();
    }

    public void changed(ObservableValue ov, Object t, Object t1)
    {
    System.out.println("focus gained - " + ov.toString()); 
    }
}

请帮忙。

谢谢, KK

PS:MenuBar API明确表示“MenuBar将focusTraversable设置为false”。但行为不同。

1 个答案:

答案 0 :(得分:1)

不幸的是,您遇到了一个错误:http://javafx-jira.kenai.com/browse/RT-20595