如何知道getValueAt()返回的单元格的类型?

时间:2017-10-31 14:19:07

标签: java swing jtable

我知道它返回类型Object,有没有办法将类型更改为最合适的类型?例如,它查看单元格,如果是浮点数,则更改为浮点数,字符串更改为类型字符串,依此类推。

修改

好的,单元格在jtable中,我正在尝试制作一个远程过滤器,用户输入两个数字来过滤一个列,该列只保留范围内的那些。

我尝试使用<field name="category_id" ref="foo_generation.module_category_foo"/> ,但有时表中的值为if( (Float) table.getvalueat(i,j) > Float.valueOf(textfield.getText()) )并在运行时返回错误。

2 个答案:

答案 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);