决定哪个组件专注于发布?

时间:2015-04-15 18:31:04

标签: java swing

我正在开发一个小型java程序,并在应用程序启动时有一个小的登录窗口。我有一个问题,Swing将焦点放在窗口的顶部字段,因为我在字段上有一个焦点监听器,可以在textField中设置/删除默认文本。所以我的问题是,我怎么能告诉他们在发布时不要把重点放在这个领域?

    private JTextField createLoginField() {

    final JTextField nameField = new JTextField();

    nameField.setFont(new Font("Ubuntu Mono", Font.ITALIC, 16));
    nameField.setToolTipText("Email or username");
    nameField.setText("Username or email");

    nameField.addFocusListener(new FocusListener() {

        @Override
        public void focusGained(FocusEvent e) {

            nameField.setText("");
            nameField.setFont(new Font("Ubuntu Mono", Font.PLAIN, 16));

        }

        @Override
        public void focusLost(FocusEvent e) {

            nameField.setFont(new Font("Ubuntu Mono", Font.ITALIC, 16));
            nameField.setText("Username or email");

        }
    });

    return nameField;

}

1 个答案:

答案 0 :(得分:0)

  

我在该字段上有一个焦点监听器,可以在textField中设置/删除默认文本。

不要使用FocusListener。

相反,您可以使用您配置的Text Prompt类,只有在用户实际在文本字段中输入文本后才会删除提示。

或者您可以使用:

component.requestFocusInWindow();

让另一个组件请求重点关注。但是,此方法只能在可见GUI上的可见组件上调用。所以代码是:

frame.setVisible(true);
component.requestFocusInWindow();