我有一个GUI设计,其中有许多用户输入的字段。我使用try-catch
来处理用户错误输入的异常。当用户在数字字段(我的id
字段)中输入字符串时,我是成功的,但我在这里尝试使用异常来处理用户在文本/字符串字段中输入整数时感到沮丧。下面是我的代码,让您了解我为成功执行的异常所做的工作。谢谢你。
try {
String taskID = txtId.getText();
int id = Integer.parseInt(taskID);
String taskName = txtName.getText();
String taskDesc = txtDesc.getText();
boolean isCompleted = chkComp.isSelected();
int taskPriority = comboPriority.getSelectedIndex();
Task newTask = new Task(id, taskName, taskDesc, isCompleted, taskPriority);
tasks.add(newTask);
taskMod.addElement(newTask);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Error: You must enter an integer");
}
我为您提供了另一个选择,您可以使用DocumentFilter
实时验证输入。这样,您就可以验证每个字符输入。如果字符与您想要的不匹配,则不允许输入。
此处仅用于数字
private JTextField createNumberField() {
JTextField field = new JTextField(20);
((AbstractDocument) field.getDocument()).setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int off, String str, AttributeSet attr)
throws BadLocationException {
fb.insertString(off, str.replaceAll("\D", ""), attr); // remove non-digits
}
@Override
public void replace(FilterBypass fb, int off, int len, String str, AttributeSet attr)
throws BadLocationException {
fb.replace(off, len, str.replaceAll("\D", ""), attr); // remove non-digits
}
});
return field;
}
这里是name(允许使用字母,-和空格)
private JTextField createNameField() {
JTextField field = new JTextField(20);
((AbstractDocument) field.getDocument()).setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(DocumentFilter.FilterBypass fb, int off, String str, AttributeSet attr)
throws BadLocationException {
fb.insertString(off, str.replaceAll("[^a-zA-Z\s\-]", ""), attr); // remove non-digits
}
@Override
public void replace(DocumentFilter.FilterBypass fb, int off, int len, String str, AttributeSet attr)
throws BadLocationException {
fb.replace(off, len, str.replaceAll("[^a-zA-Z\s\-]", ""), attr); // remove non-digits
}
});
return field;
}