DefaultTableModel, добавить строку, динамическое количество столбцов

Как и выше, я не знаю, сколько столбцов будет в строке, поэтому, очевидно, у меня проблемы с массивом String[]. Будет как минимум 2 столбца - это данность.

Как обойти это ограничение?

DefaultTableModel tableModel = new DefaultTableModel(0,1+queryResult.size());



Object[] row = {t.getDate(),'some data'};

tableModel.addRow(row);

view.getPriceHistoryTable().setModel(tableModel);

но если queryResult.size() больше 1, вместо этого я хочу сделать:

Object[] row = {t.getDate(),'some data','more data'};

tableModel.addRow(row);

view.getPriceHistoryTable().setModel(tableModel);

и так далее...


person LucasSeveryn    schedule 15.04.2016    source источник
comment
Я не понимаю вопроса. Ваш queryResult.size() должен сообщить вам количество столбцов. Или вы можете использовать метод table.getColumnCount().   -  person camickr    schedule 15.04.2016
comment
@camickr добавил объяснение   -  person LucasSeveryn    schedule 15.04.2016
comment
Почему вы не можете создать модель с количеством столбцов по умолчанию, а затем использовать .addColumn() для добавления дополнительного столбца, если это указано в данных?   -  person KevinO    schedule 15.04.2016
comment
Все еще не понимаю проблемы. Откуда берутся некоторые данные и еще данные. Если вы знаете, сколько фрагментов данных у вас есть, вы просто добавляете данные в модель.   -  person camickr    schedule 15.04.2016


Ответы (3)


Размер массива не обязательно должен быть константой времени компиляции:

int colCount = 1 + queryResult.size();

String[] row = new String[colCount];
row[0] = t.getDate();

for(int i = 1; i < row.length; i++) {
    row[i] = "some data"; // or get data from somewhere else
}

tableModel.addRow(row);
person Jorn Vernee    schedule 15.04.2016
comment
Если это ответ, то не используйте массив. Просто используйте вектор и метод addElement() для добавления элементов в вектор. DefaultTableModel в любом случае преобразует массив в вектор, поэтому использование вектора будет более эффективным. - person camickr; 15.04.2016

Вы можете получить доступ к модели столбца через объект JTable и получить всю информацию о своих столбцах.

int cols = table.getColumnCount();

Используя вашу модель, вы можете установить количество строк и столбцов таким образом

model.setRowCount(rows); 
model.setColumnCount(cols);

Таким образом, вы можете динамически устанавливать количество строк и столбцов в соответствии с результатами вашего запроса.

person Jorge    schedule 15.04.2016
comment
Я знаю это, но это не помогает мне с моей проблемой - person LucasSeveryn; 15.04.2016

for(int i=0; i < 1+queryResult.size(); i++)
    model.addColumn(i+1); // i+1 will be the header name for each column

сделайте это изначально, затем вы можете добавить свои строки

person user14549237    schedule 30.10.2020