【问题标题】:Java "JTextField.requestFocus()" not working in a JOptionPaneJava“JTextField.requestFocus()”在 JOptionPane 中不起作用
【发布时间】:2014-03-27 22:07:06
【问题描述】:

我试图请求关注第一个用户名字段,但它没有关注文本字段。这是我的代码:

JTextField username = new JTextField();
JTextField password = new JPasswordField();
JTextField prefix = new JTextField();
username.requestFocus();
Object[] message = {
    "Username:", username,
    "Password:", password,
    "Prefix:", prefix
};

int option = JOptionPane.showConfirmDialog(null, message, "Login", JOptionPane.OK_CANCEL_OPTION);
username.requestFocus();
if (option == JOptionPane.OK_OPTION) {
    return ls.login(username.getText(), password.getText(), prefix.getText());
} else {
    return false;
}

如何请求用户名文本字段的焦点?

【问题讨论】:

    标签: java swing focus joptionpane


    【解决方案1】:

    这里是怎么做的:

    final JTextField username = new JTextField();
    JTextField password = new JPasswordField();
    JTextField prefix = new JTextField();
    JPanel gridLayout = new JPanel(new GridLayout(6, 1));
    gridLayout.add(new JLabel("Username:"));
    gridLayout.add(username);
    gridLayout.add(new JLabel("Password:"));
    gridLayout.add(password);
    gridLayout.add(new JLabel("Prefix:"));
    gridLayout.add(prefix);
    
    username.addAncestorListener(new AncestorListener() {
        @Override
        public void ancestorRemoved(AncestorEvent pEvent) {
        }
    
        @Override
        public void ancestorMoved(AncestorEvent pEvent) {
        }
    
        @Override
        public void ancestorAdded(AncestorEvent pEvent) {
            // TextField is added to its parent => request focus in Event Dispatch Thread
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    username.requestFocusInWindow();
                }
            });
        }
    });
    
    int option = JOptionPane.showConfirmDialog(null, gridLayout, "Login",
        JOptionPane.OK_CANCEL_OPTION);
    

    我只是将您的Object[] message 替换为JPanel 对象,并使用AncestorListener 在将文本字段添加到其父级时收到通知。

    注意:我不知道为什么它不适用于您的 Object[] message

    【讨论】:

    • 用户名.requestFocusInWindow();在invokeLater
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2017-05-16
    • 2014-05-30
    • 2018-05-15
    • 2015-05-27
    相关资源
    最近更新 更多