我有一个登录表单,用户可以输入他的凭据进行登录.我有一个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).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。