无法在JDialog中将键盘焦点放在JTextField上

时间:2011-07-01 21:30:09

标签: java swing focus

我有一个弹出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时,我必须按两次。

提前致谢。

1 个答案:

答案 0 :(得分:3)

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