从AbstractTableModel扩展时如何正确填充表中的数据

时间:2012-10-23 05:35:03

标签: java swing jtable tablemodel

我得到一个类对象数组(名为:store)。我必须从商店数组中检索一些值,并希望用这些值填充我的JTable(Object [] []数据)。我已将此数组传递到一个类中,我计划在其中绘制包含该表的用户界面。所以,我的代码看起来像

public class Dialog { // Here is where i plan to draw my UI (including the table)
....
    public Dialog(Store store) { // Store = an array of class object.
    .. }


    private class TableModel extends AbstractTableModel {

    private String[] columnNames = {"Selected ",
            "Customer Id ",
            "Customer Name "
    };
    private Object[][] data = {
            //  ???? 
    };
    }
}

现在,我的问题是,如果我想确保我的设计是一个好的设计并遵循OOP的原则那么我应该从存储中提取值以及我应该如何将其传递给data [] []。< / p>

1 个答案:

答案 0 :(得分:0)

我会创建Object的简单Store表示(您甚至可以使用Properties对象或Map)。这将构成一个单独的行。

然后我会将每个“行”放入一个列表......

protected class TableModel extends AbstractTableModel {

    private String[] columnNames = {"Selected",
            "Customer Id",
            "Customer Name"};

    private List<Map> rowData;

    public TableModel() {
        rowData = new ArrayList<Map>(25);
    }

    public void add(Map data) {
        rowData.add(data);
        fireTableRowsInserted(rowData.size() - 1, rowData.size() - 1);
    }

    public int getRowCount() {
        return rowData.size();
    }

    public int getColumnCount() {
        return columnNames.length;
    }

    public String getColumnName(int column) {
        return columnNames[column];
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Map row = rowData.get(rowIndex);
        return row.get(getColumnName(columnIndex));
    }
 }

现在,显然,这是一个非常简单的例子,但我希望你明白这个想法