java - Swing : Single AbstractTableModel for multiple objects ? ?

标签 java swing jtable abstracttablemodel

我有不同的对象,用于将数据库中的数据存储在 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;
    }
}

将此作为适用于所有人的单一模型进行处理的任何好主意。也可以从这里为表触发事件。

我知道这有点复杂。但结构庞大,正在创建新类 AbstractTableModelJTable对于每个对象也不是一个好主意。

你有什么建议?

最佳答案

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

例如你可以有一个接口(interface):

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

Product 和 Relation 类都应该实现这个,然后你的模型就可以在 DBRow 接口(interface)上工作。

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

关于java - Swing : Single AbstractTableModel for multiple objects ? ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8266629/

相关文章:

java - 如何通过在java中迭代3个不同的列表对象来向列表对象添加元素?

java - 如何更新我的 CardLayout UI?

java - 如何使用 TableHeader 渲染器

java - 无法在 JTable 的单个单元格中添加两个按钮

java - 如何使用 boolean 数据类型模拟 JTable 中的单选按钮行为

java - Hibernate/JPA 是否考虑了 transient 修饰符(而不是注释)

java - Collections.sort() 错误

java - 使用 java 从 WSDL 创建 Web 服务客户端

java - 如何在保留先前文本的同时输入 HTML JEditorPane?

Java Swing 组件 Init NullPointerException