我有一个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");
}
答案 0 :(得分:1)
我还有另一个选项,您可以使用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;
}
这是名称(字母, - 和空格)是允许的
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;
}