#view #filter #save #jtable #tablemodel
#Вид #Фильтр #Сохранить #jtable #табличная модель
Вопрос:
Я работаю над проектом, который включает JTable и выполнение операций сортировки и фильтрации над ним. Я закончил с частью сортировки и фильтрации, и теперь я хочу иметь возможность создавать новую таблицу из текущего представления старой таблицы.
например, если я применяю определенные фильтры к своей старой таблице, некоторые строки отфильтровываются. Я не хочу, чтобы эти отфильтрованные строки были в моей новой таблице. Я подумал, что могу преобразовать индексы новой строки в индексы модели и вручную добавить значения ячеек в модель новой таблицы, но мне было интересно, есть ли какой-либо другой эффективный способ сделать это?
В итоге я сделал следующее:
//this code block will print out the rows in current view
int newRowCount = table.getRowCount();
int newColumnCount = table.getColumnCount();
for (int i = 0; i < newRowCount; i ) {
for (int j = 0; j < newColumnCount; j ) {
int viewIndex = table.convertRowIndexToModel(i);
String value = (String) model.getValueAt(viewIndex, j);
System.out.print(value "t");
}
System.out.println();
}
Ответ №1:
нет необходимости в каком-либо преобразовании индекса, просто задайте запрос к таблице вместо базовой модели
for (int i = 0; i < table.getRowCount(); i ) {
for (int j = 0; j < table.getColumnCount(); j ) {
Object value = table.getValueAt(i, j);
System.out.print(value "t");
}
}
Примечание: лучше переименуйте i / j в строку / столбец для удобства чтения, было слишком лениво 😉
Комментарии:
1. Ну, поскольку некоторые строки отфильтрованы и вообще не отображаются, видимые строки могут отображаться с совершенно другим индексом, так что, я думаю, нам в любом случае понадобится преобразование индекса. (По крайней мере, это то, что я прочитал после прочтения о JTable javadocs). Тем не менее, я также попробую ваш код. Спасибо! Примечание: замена ввода / j на RowIndex / ColumnIndex — хорошая идея, чтобы сделать код читаемым, поэтому мне просто пришло в голову вызвать getRowCount() и getColumnCount () только один раз, чтобы сделать его более эффективным 😉
2. @user744820 как я понял, вам нужна новая модель, которая содержит видимые строки старой таблицы. Если это предположение верно, фрагмент кода выполняет то, что вы хотите. Если нет, я неправильно понял 🙂