【发布时间】:2016-05-22 06:59:33
【问题描述】:
我有一个列数的 JTable。 我有兴趣让其中一列只接受十六进制数字。 数字的格式为: 0x[0-9a-fA-F]*
如何创建它? 如果我可以添加“错误”指示会很棒
【问题讨论】:
标签: java swing jtable hex tablecellrenderer
我有一个列数的 JTable。 我有兴趣让其中一列只接受十六进制数字。 数字的格式为: 0x[0-9a-fA-F]*
如何创建它? 如果我可以添加“错误”指示会很棒
【问题讨论】:
标签: java swing jtable hex tablecellrenderer
试试这个:
boolean isValidHex(String s) {
return s.matches("0x[0-9a-fA-F]*");
}
void addNumberToColumn(int number) {
String s = "0x" + Integer.toHexString(number);
if (isValidHex(s)) {
// accept/add to column
} else {
// produce error/show error message
}
}
如果你能提供你的代码,那就太好了,这样你的问题对社区来说会更清楚。
编辑: 好的,如果我理解正确,您使用
而您只想验证用户输入,以便他可以输入 HEX 格式的数字或不输入任何内容(或者应该显示错误)。
十六进制整数可以表示为字符串,所以首先,您必须更改 data 数组以告诉您的 TableModel 您将在“# of Years”中使用字符串(但不是整数)-专栏:
private Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", "5", new Boolean(false)}, // or new String("5") if you want :)
{"John", "Doe",
"Rowing", "3", new Boolean(true)},
{"Sue", "Black",
"Knitting", "2", new Boolean(false)},
{"Jane", "White",
"Speed reading", "2", new Boolean(true)},
{"Joe", "Brown",
"Pool", "10", new Boolean(false)}
};
接下来就是修改setValueAt()方法:
public void setValueAt(Object value, int row, int col) {
if (DEBUG) {
System.out.println("Setting value at " + row + "," + col
+ " to " + value
+ " (an instance of "
+ value.getClass() + ")");
}
if (col == 3) { // num of Years column
boolean isValidHex = ((String) value).matches("0x[0-9a-fA-F]*");
if (isValidHex) {
data[row][col] = value;
fireTableCellUpdated(row, col);
} else {
data[row][col] = "Error: Wrong format!";
}
} else {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
if (DEBUG) {
System.out.println("New value of data:");
printDebugData();
}
}
【讨论】: