java – 处理JTextField中的编辑事件

前端之家收集整理的这篇文章主要介绍了java – 处理JTextField中的编辑事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
我有一个登录表单,用户可以输入他的凭据进行登录.我有一个JLabel,用于显示告诉用户用户名不能为空的文本.用户在文本字段为空时单击登录按钮后显示标签.

我想在用户开始在文本字段中输入的那一刻,带有信息的标签应该消失.我如何实现这种行为?

这是代码

public class JTextFiledDemo {

private JFrame frame;

JTextFiledDemo() {
    frame = new JFrame();
    frame.setVisible(true);
    frame.setSize(300,300);
    frame.setLayout(new GridLayout(4,1));
    frame.setLocationRelativeTo(null);
    iniGui();
}

private void iniGui() {

    JLabel error = new JLabel(
            "<html><font color='red'> Username cannot be empty!<></html>");

    error.setVisible(false);
    JButton login = new JButton("login");
    JTextField userName = new JTextField(10);

    frame.add(userName);
    frame.add(error);
    frame.add(login);
    frame.pack();

    login.addActionListener((ActionEvent) -> {
        if (userName.getText().equals("")) {
            error.setVisible(true);
        }
    });

}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JTextFiledDemo tf = new JTextFiledDemo();
        }
    });
 }
}

解决方法

为此,您需要在JTextField上使用DocumentListener,此处为 tutorial.

例如:

userName.getDocument().addDocumentListener(new DocumentListener() {
    @Override
    public void insertUpdate(DocumentEvent de){
       event(de);
    }

    @Override
    public void removeUpdate(DocumentEvent de) {
        event(de);
    }

    @Override
    public void changedUpdate(DocumentEvent de){
        event(de);
    }

    private void event(DocumentEvent de){
        error.setVisible(de.getDocument().getLength() == 0);
        // as mentioned by nIcE cOw better to use Document from parameter
        frame.revalidate();
        frame.repaint();
    }
});

错误必须是最终的(对于低于8版本的java).

同样在开始时,您的字段为空,因此可能需要在错误标签上使用setVisible(true).

猜你在找的Java相关文章