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

6qftjkof  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(313)

我知道它返回类型object,有没有办法把类型改成最合适的类型?例如,它查看单元格,如果它是一个float,它将更改为float,字符串将更改为string类型等等。
编辑
好的,单元格在一个jtable中,我正在尝试创建一个范围过滤器,用户输入两个数字来过滤一个列,该列只保留范围内的数字。
我试过选角 if( (Float) table.getvalueat(i,j) > Float.valueOf(textfield.getText()) ) 但有时表中的值 long 并在运行时返回错误。

sshcrbum

sshcrbum1#

你可以用

if(value instanceof float)

或者

if(value instanceof long)
8ftvxx2r

8ftvxx2r2#

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

相关问题