我有一个带有JDialog弹出窗口的Swing应用程序,要求输入用户名和密码。我认为将键盘焦点放在用户名字段中会很好,但是到目前为止我尝试过的所有方法都不起作用(即使我尝试过的一种解决方案也适用于程序中的另一个文本字段),所以。 ...我需要一些帮助。这是我的代码:

//JTextField usernameField = ...
JDialog dialog = pane.createDialog("Password:");
dialog.setVisible(true);


//Take 1
usernameField.requestFocusInWindow();

//Take 2
dialog.addWindowFocusListener(new WindowAdapter() {
        public void windowGainedFocus(WindowEvent e) {
            usernameField.requestFocusInWindow();
        }
});

//Take 3 - This is what I used elsewhere quite successfully
dialog.addComponentListener(new ComponentAdapter() {
    public void componentShown(ComponentEvent e ) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                usernameField.requestFocusInWindow();
            }
        });
    }
});


对于它的价值,这是在Linux / X11 / Openbox中。在使用GTK时,必须按一次Tab以选择适当的字段,但是在使用Metal时,必须按两次。

提前致谢。

最佳答案

有关提示和策略,请参见Dialog Focus

10-08 14:55