Java GUI Jframe异常处理

时间:2014-05-04 20:39:57

标签: java swing user-interface exception-handling try-catch

我有一个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");

}

1 个答案:

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