Добавить строки в JTable

Я пытаюсь вставить динамические строки из массива. Я использую следующий код, указанный на сайте 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, если есть какой-то другой способ, то добро пожаловать, чтобы направлять меня.


person Volatil3    schedule 05.02.2014    source источник
comment
Дополнительные сведения см. в разделе Как использовать таблицы.   -  person MadProgrammer    schedule 06.02.2014


Ответы (2)


вместо использования массива фиксированного размера вы можете использовать что-то вроде списка:

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

to

ArrayList<Object[]> rowData;

и т. д., затем, чтобы добавить строку, вы должны сделать rowData.add(stuff). вам нужно будет преобразовать все методы для ссылки на размер строк и т. д.

Но, скорее всего, вместо того, чтобы использовать это вообще, используйте что-то вроде DefaultTableModel (или какую-то другую реализацию модели таблицы) вместо таких массивов:

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

person John Gardner    schedule 05.02.2014
comment
+1 Реализация OP очень похожа на DefaultTableModel, так зачем изобретать велосипед? Обратите внимание, что ссылка предназначена для Java 6, а не 7. - person dic19; 06.02.2014

В вашей реализации 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());
    }
};
person Paul Samsotha    schedule 06.02.2014