如何子类化DefaultTableModel并更改其dataVector

时间:2010-11-30 16:40:58

标签: java swing

我想扩展DefaultTableModel并更改其dataVector。 我想让dataVector在列中仅显示DataHolder的特定字段:

 public class MyTableModel extends DefaultTableModel {

    /**
     * The data vector
     */
    private Vector<DataHolder>   dataVector_;

    //overridden method to add row in the table model
    public void addRow(DataHolder rowData) {
        insertRow(getRowCount(), rowData);
    }

    public void insertRow(int row, DataHolder rowData) {
            dataVector_.insertElementAt(rowData, row);
            fireTableRowsInserted(row, row);
        }

    ...} //end of MyTableModel



   class DataHolder{
     private int age;
     private int year;
     private int month;
     private int day;
    }

如何在jtable中显示特定的DataHolder字段?我的表有3列,分别为月,日和年。

3 个答案:

答案 0 :(得分:4)

您需要为此创建自定义模型。 DefaultTableModel不是最好的起点。

通常,您将扩展AbstractTableModel并使用ArrayList存储DataHolder对象。然后,您需要实现TableModel接口的其他方法。 How to Use Tables上的Swing教程向您展示了如何执行此操作的基础知识。

或者您可以使用为您完成所有工作的Bean Table Model

答案 1 :(得分:1)

您必须覆盖getValueAt(...)方法:

@Override
public Object getValueAt(int row, int column) {
    DataHolder data = dataVector_.get(row);
    switch(column) {
        case 0: return data.month;
        case 1: return data.day;
        case 2: return data.year;
        default: return null;
    }

答案 2 :(得分:0)

您想在表格模型或表视图中更改此设置吗?如果您正在为视图使用JTable,我是否可以建议您使用TableColumnModel来访问JTable