jtable中的验证数据

时间:2014-02-07 23:52:46

标签: java swing jtable

我有一个JTable,我希望在第一列中验证数据。当用户在第一列中的任何单元格中键入条目并单击另一个单元格(焦点丢失)时,我希望显示该条目为false的消息,并再次在单元格中聚焦,直到该条目有效。

首先我认为单元格与JTextFiled类似,所以我尝试了addFocusListener(...)方法,但它不起作用!

table.getValueAt(0, 0).addFocusListener(
    new FocusListener() {
        public void focusGained(FocusEvent e) {
        }

        public void focusLost(FocusEvent e) {

            for (int n = 0; n <= table.getValueAt(0, 0).toString().length(); n++) {

                if (Character.isDigit(table.getValueAt(0, 0).toString().charAt(n)) == false) {
                    JOptionPane.showMessageDialog(null,
                    "Error: code is a number !", "Error Message",
                    JOptionPane.ERROR_MESSAGE);
                        break;
                    } else
                        break;
                }
            }
        }
    }
});

创建JTable:

 String [][]data={  {"-","-","0","-"},
                       {"-","-","0","-"},
                       {"-","-","0","-"},
                       {"-","-","0","-"},
                        {"-","-","0","-"},
                       {"-","-","0","-"},
                       {"-","-","0","-"},
                       {"-","-","0","-"}  };



     String[] header = {"Code Projet", "Description", "Duree", "Taches anterieurs"};


     table = new JTable(data, header);

1 个答案:

答案 0 :(得分:0)

添加到TableCellEditor的{​​{1}}会对输入JTable的值进行任何验证。

来自Java Table Tutorial

  

默认情况下会自动检查用户输入的字符串   编辑器尝试创建与之关联的类的新实例   细胞的专栏。默认编辑器使用a创建此实例   将String作为参数的构造函数。例如,在   当用户键入“123”时,其单元格类型为Integer的列   默认编辑器使用等效的代码创建相应的Integer   新的整数(“123”)。如果构造函数抛出异常,则   单元格的轮廓变为红色,并拒绝让焦点移出   细胞。如果实现用作列数据类型的类,则可以使用   默认编辑器,如果您的类提供了一个带有的构造函数   String类型的单个参数。

因此,如果您只想确保用户输入JTable(从代码中看起来像这样),您可以将列类型设置为Integer类型。

Integer

现在table.setDefaultEditor(Integer.class, new IntegerEditor(0, 100)); 将为您进行检查,如果类型不正确则抛出异常。您只需要确保捕获异常并正确处理它。

我认为上面关于创建表格的链接对你很有帮助,尤其是我链接到有关验证用户文本的部分。