2014-05-04 142 views
0

我有一个图形用户界面设计,有许多字段,用户输入。我正在使用try-catch来处理用户错误输入的异常。当用户在字段中输入一个字符串时,我很成功(我的id字段),但我很沮丧,试图在用户在文本/字符串字段中输入整数时使用异常来处理。 这里是我的代码,让你知道我为我成功的例外做了些什么。谢谢。Java GUI Jframe异常处理

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

你好,谢谢你的回复,但什么时候运异常会那是?像这是一个“NumberFormatException”?对不起,我是新来学习这个。 – user3597639

+0

嗯,我在这里有点困惑。你的目标是让程序再次提示吗? – BitNinja

+0

是的,我的目标是提示用户“你必须在名称中输入一个字符串而不是整数”..很抱歉,如果我没有太大的意义。我的目标是让它提示出现任何错误 – user3597639

回答

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; 
} 

这里是一个名称(字母, - 和空格)被允许