在JTable中添加行

时间:2014-02-05 21:38:06

标签: java swing jtable abstracttablemodel

我正在尝试从Array插入动态行。我正在使用Oracle网站上提供的以下代码:

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不是特别感兴趣,如果还有其他方法,那么最欢迎指导我。

2 个答案:

答案 0 :(得分:3)

而不是使用固定大小的数组,您可以使用类似列表的内容:

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

ArrayList<Object[]> rowData;

等。然后添加一行你要做rowData.add(stuff)。你必须转换所有方法来引用行的大小等。

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

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

答案 1 :(得分: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());
    }
};