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

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;
}


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

最佳答案

这是怎么做的:

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

08-05 20:51
查看更多