我有一个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);
答案 0 :(得分:0)
添加到TableCellEditor
的{{1}}会对输入JTable
的值进行任何验证。
默认情况下会自动检查用户输入的字符串 编辑器尝试创建与之关联的类的新实例 细胞的专栏。默认编辑器使用a创建此实例 将String作为参数的构造函数。例如,在 当用户键入“123”时,其单元格类型为Integer的列 默认编辑器使用等效的代码创建相应的Integer 新的整数(“123”)。如果构造函数抛出异常,则 单元格的轮廓变为红色,并拒绝让焦点移出 细胞。如果实现用作列数据类型的类,则可以使用 默认编辑器,如果您的类提供了一个带有的构造函数 String类型的单个参数。
因此,如果您只想确保用户输入JTable
(从代码中看起来像这样),您可以将列类型设置为Integer
类型。
Integer
现在table.setDefaultEditor(Integer.class,
new IntegerEditor(0, 100));
将为您进行检查,如果类型不正确则抛出异常。您只需要确保捕获异常并正确处理它。
我认为上面关于创建表格的链接对你很有帮助,尤其是我链接到有关验证用户文本的部分。