2014-02-05 60 views
0

我试图从数组中插入动态行。我使用的Oracle网站给出下面的代码:在JTable中添加行

class mYModel extends AbstractTableModel 
{ 
    Object rowData[][] = { {Boolean.TRUE ,"11","OMF","C++","Jhon Doe",22}}; 
    Object[] arr = new Object[5]; 

    String columnNames[] = { 
          "Action", 
          "Pages", 
          "Name", 
          "Title", 
          "Author", 
          "TimeStamp" 
         }; 

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

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

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

    public Object getValueAt(int row, int column) { 
    return rowData[row][column]; 
    } 

    public Class getColumnClass(int column) { 
    return (getValueAt(0, column).getClass()); 
    } 
    @Override 
    public void setValueAt(Object value, int row, int column) { 
    rowData[row][column] = value; 
    } 
    @Override 
    public boolean isCellEditable(int row, int column) { 
    return (column == 0); 
    } 
} 

我想那是什么rowData [] []得到的值动态地而不是我初始化。我不习惯Java,因此无法理解这样做的想法。

我不是特别有兴趣使用AbstractModel,如果还有其他方法,那么最欢迎引导我。的

+1

看看[如何使用表(http://docs.oracle.com/javase/tutorial/uiswing/components/table.html)了解更多详情 – MadProgrammer

回答

3

不是采用固定大小的数组,你可以使用类似的列表:

Object rowData[][] = { {Boolean.TRUE ,"11","OMF","C++","Jhon Doe",22}}; 

ArrayList<Object[]> rowData; 

等,然后添加一行你会做rowData。添加(东西)。你必须转换所有的方法来引用行的大小等。

但更有可能的是,而不是使用它,使用像DefaultTableModel(或其他一些tablemodel实现)而不是像这样的数组:

http://docs.oracle.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html

+0

+1 OP的实现看起来很像'DefaultTableModel',所以为什么要重新创建轮子?请注意,链接是针对Java 6而不是7的。 – dic19

1

没有什么特别的你AbstractTableModel实现。使用已经实现DefaultTableModel

String columnNames[] = { 
         "Action", 
         "Pages", 
         "Name", 
         "Title", 
         "Author", 
         "TimeStamp" 
        }; 
DefualtTableModel model = new DefaultTableModel(columnNames, 0); <-- 0 is row count 
JTable table = new JTable(model); 

然后,只需使用此方法从DefaultTableModel

  • public void addRow(Object[] rowData) - 添加一行到模型的结尾。除非指定了rowData,否则新行将包含空值。将生成正在添加的行的通知。

所以每当你想添加的行只是这样做

Object[] row = { data1, data2, data2, data4, data5, data6 }; 
model.addRow(row); 

如果你需要额外的功能,你总是可以扩展它,或者如果你只是想重写getColumnClass()得到一个复选框,你可能只是这样做

DefaultTableModel model = new DefaultTableModel(columnNames, 0) { 
    @Override 
    public Class getColumnClass(int column) { 
     return (getValueAt(0, column).getClass()); 
    } 
};