我知道它返回类型Object,有没有办法将类型更改为最合适的类型?例如,它查看单元格,如果是浮点数,则更改为浮点数,字符串更改为类型字符串,依此类推。
修改
好的,单元格在jtable中,我正在尝试制作一个远程过滤器,用户输入两个数字来过滤一个列,该列只保留范围内的那些。
我尝试使用<field name="category_id" ref="foo_generation.module_category_foo"/>
,但有时表中的值为if( (Float) table.getvalueat(i,j) > Float.valueOf(textfield.getText()) )
并在运行时返回错误。
答案 0 :(得分:1)
您可以使用
if(value instanceof float)
或
if(value instanceof long)
答案 1 :(得分:1)
java中的所有对象都是Object
的继承人。这意味着您可以返回所需的一切,而不是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));
对于更具体的事情,您需要对适当的类型(返回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);