3

我有不同的对象,用于将数据库中的数据存储在ArrayList<T>. 我必须在表格中显示每个记录。我使用AbstractTableModel第一个对象正在处理。该类AbstractTableModel有一个ArrayList<Relation>和一个String[]的标题。

我的问题是:如何创建AbstractTableModel可用于所有对象的相同对象。我的意思是,如果使用 Relation,我可以拥有ArrayList<Relation>,如果使用 Product,则可以拥有ArrayList<Product>..etc。在我看来,为每个人写不同AbstrastTableModel的东西并不是一个好主意。主要问题是setValueAt, getValue, addRow....

    @Override
public void setValueAt(Object value, int row, int col) {
    Relation r = data.get(row);     // ArrayList<Relation> data
    switch (col) {
        case 0:
            r.setId(value.toString());
            break;
        case 1: r.setName(value.toString());
            break;
        case 2: r.setStartBalance((Double)value);
            break;
        case 3: r.setCurrentBalance((Double)value);
            break;
    }
}

任何将其作为适用于所有人的单一模型的好主意。并且还可以从这里为表触发事件。

我知道这有点复杂。但是结构很大,为每个对象创建新的类AbstractTableModel也不JTable是一个好主意。

你有什么建议?

4

2 回答 2

3

您可以在多个数据类上创建抽象,以便它们公开 setValue(int columnNumber, Object Value) 等方法和类似的 getValue() 方法。然后你可以在这个新的抽象上写 AbstractTableModel。之后创建所需的表模型只需要更改模型构造函数中的数据类。

例如你可以有一个接口:

interface DBRow
{
    public void setValue(int columnNumber, Object value);
    public Object getValue(int columnNumber);
}

Product 和 Relation 类都应该实现这一点,然后您的模型可以在 DBRow 接口上工作。

您也可以考虑直接使用结果集来填充表格: resultset-to-tablemodel

于 2011-11-25T08:59:08.787 回答
0

在我看来,一个AbstractTableModel应该只用于一种对象类型。也许您应该重新考虑您的数据模型。

无论如何,解决这个问题的肮脏方法可能是在你的中使用 anArrayList<Object>AbstractTableModel在你的getValue()-method 中使用instanceof. 然后,您可以决定每个对象类型返回该特定对象的哪个参数。

例子:

@Override
public void setValueAt(Object value, int row, int col) {
    Object r = data.get(row);     // ArrayList<Object> data
    switch (col) {
        case 0:
            if (r instanceof Relation) {
               ((Relation)r).setId(value.toString());
            } else {
               // do something with Product
            }
            break;
    }
}

这对你有用吗?

于 2011-11-25T09:13:29.503 回答