【发布时间】:2021-10-25 18:52:57
【问题描述】:
我实际上是在通过这个小项目学习 Java Swing API。
这是代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import com.userView.Utilities;
public class MobileNumberValidation extends JFrame {
private JButton clearButton ;
private JTextField mobileNumberField ;
private JLabel mobileNumberLabel ;
private JLabel errorMessage ;
MobileNumberValidation(){
//Intializing the instance variables
clearButton = new JButton("clear");
mobileNumberField = new JTextField();
mobileNumberLabel = new JLabel("TEL");
errorMessage = new JLabel("Tel is empty");
setSize(500, 500);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
//add components to Jframe
add(mobileNumberField);
add(clearButton);
add(mobileNumberLabel);
add(errorMessage);
//set components location
mobileNumberField.setBounds(200, 170, 230, 20);
clearButton.setBounds(200, 220, 100, 20);
mobileNumberLabel.setBounds(160, 170, 100, 20);
errorMessage.setBounds(210, 190, 300,20);
//components style
errorMessage.setForeground(Color.decode("#CD5C5C"));
//add listener and handle event
mobileNumberField.getDocument().addDocumentListener(new DocumentListener(){
@Override
public void changedUpdate(DocumentEvent arg0) {
}
@Override
public void insertUpdate(DocumentEvent arg0) {
processTelValidation();
}
@Override
public void removeUpdate(DocumentEvent event) {
System.out.println("removeUpdate");
processTelValidation();
}
public void processTelValidation() {
if (Utilities.isRegExPatternMatching("^0[0-9]{6}$", mobileNumberField.getText())) {
errorMessage.setVisible(false);
}else{
errorMessage.setVisible(true);
errorMessage.setText("enter a valid Tel number");
}
}
});
clearButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
//clear mobileNumberField
mobileNumberField.setText("");
}
});
}
public static void main(String[] args) {
new MobileNumberValidation();
}
}
每次我按下clearButton 清除字段时,mobileNumber.setText("") 都会被调用,它会从DocumentListener 触发removeUpdate(),我不希望这样。
您是否知道任何其他方法来清理 JTextField 组件的字段或使用 JTextField.setTextField() 但不触发 DocumentListener 方法?
【问题讨论】:
-
考虑使用
InputVerifier来验证输入的电话号码。请参阅如何使用焦点子系统网页上的Validating Input。或者只是在针对正则表达式进行测试之前检查mobileNumberField的内容是否为空。
标签: java swing jtextfield documentlistener