如何知道 getValueAt() 返回的单元格类型?
How to know the type of the cell returned by getValueAt()?
我知道它是returns类型的Object,有没有办法把类型改成最合适的table?比如看单元格,如果是float就变成float,字符串变成string类型等等。
编辑
好的,单元格在 jtable 中,我正在尝试制作一个范围过滤器,用户输入两个数字来过滤一列,只保留范围内的数字。
我试过强制转换 if( (Float) table.getvalueat(i,j) > Float.valueOf(textfield.getText()) )
有效,但有时 table 中的值是 long
和 returns 在运行时出错。
您可以使用
if(value instanceof float)
或
if(value instanceof long)
java 中的所有对象都是 Object
的继承人。这意味着您可以 return 而不是 Object
任何您想要的东西。
public class MyTableModel extends DefaultTableModel implements TableModel {
@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 0: return Integer.class;
case 1: return Double.class;
case 2: return Boolean.class;
case 3: return Date.class;
case 4: return String.class;
}
return Object.class;
}
@Override
public Object getValueAt(int row, int column) {
switch (column) {
case 0: return 1;
case 1: return 1.2;
case 2: return true;
case 3: return new Date();
case 4: return "My Text Value";
}
return new Object();
}
}
如果您使用的是对象虚方法(如 equals),您可以直接定位对象:
textfield.getText().equals(model.getValueAt(1, 4));
对于更具体的事情,您需要显式转换为适当的类型(returns TableMOdel#getColumnClass(int)
)。
更新 :
在模型中,您可以添加一个模板方法来保存您在值检索中的显式转换。
public <T> T getValue(int row, int column) {
return (T) getValueAt(row, column);
}
然后您将能够按如下方式使用单元格值:
Integer var0 = model.getValue(1, 0);
Double var1 = model.getValue(1, 1);
Boolean var2 = model.getValue(1, 2);
Date var3 = model.getValue(1, 3);
String var4 = model.getValue(1, 4);
我知道它是returns类型的Object,有没有办法把类型改成最合适的table?比如看单元格,如果是float就变成float,字符串变成string类型等等。
编辑
好的,单元格在 jtable 中,我正在尝试制作一个范围过滤器,用户输入两个数字来过滤一列,只保留范围内的数字。
我试过强制转换 if( (Float) table.getvalueat(i,j) > Float.valueOf(textfield.getText()) )
有效,但有时 table 中的值是 long
和 returns 在运行时出错。
您可以使用
if(value instanceof float)
或
if(value instanceof long)
java 中的所有对象都是 Object
的继承人。这意味着您可以 return 而不是 Object
任何您想要的东西。
public class MyTableModel extends DefaultTableModel implements TableModel {
@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 0: return Integer.class;
case 1: return Double.class;
case 2: return Boolean.class;
case 3: return Date.class;
case 4: return String.class;
}
return Object.class;
}
@Override
public Object getValueAt(int row, int column) {
switch (column) {
case 0: return 1;
case 1: return 1.2;
case 2: return true;
case 3: return new Date();
case 4: return "My Text Value";
}
return new Object();
}
}
如果您使用的是对象虚方法(如 equals),您可以直接定位对象:
textfield.getText().equals(model.getValueAt(1, 4));
对于更具体的事情,您需要显式转换为适当的类型(returns TableMOdel#getColumnClass(int)
)。
更新 : 在模型中,您可以添加一个模板方法来保存您在值检索中的显式转换。
public <T> T getValue(int row, int column) {
return (T) getValueAt(row, column);
}
然后您将能够按如下方式使用单元格值:
Integer var0 = model.getValue(1, 0);
Double var1 = model.getValue(1, 1);
Boolean var2 = model.getValue(1, 2);
Date var3 = model.getValue(1, 3);
String var4 = model.getValue(1, 4);