如何知道 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);