Я делаю программу, связанную с графикой, поэтому мне нужно динамически создавать/удалять столбцы из JTable для имитации таблицы смежности. Я уже могу создавать столбцы по желанию, но я не могу их удалить, потому что, если я удалю столбец, а затем создаю другой столбец, предыдущие данные (из удаленного столбца) будут показаны в последнем столбце.Удалить столбец из JTable
Я читал это потому, что данные столбца не удаляются из таблицы. Я видел примеры, чтобы скрыть или показать столбцы, но мне действительно нужно их удалить, поэтому, когда я получу двумерную матрицу данных, у меня нет перекрестных ссылок или плохих данных.
Первая поправка:
private DefaultTableModel removeCol(int id){
DefaultTableModel tmp = new DefaultTableModel();
int columnas = modelo.getColumnCount();
for(int i=0;i<columnas;i++){
if(i!=id)
tmp.addColumn(modelo.getColumnName(i));
}
int rows = modelo.getRowCount();
String datos[] = new String[columnas-1];
for(int row=0;row<rows;row++){
for(int col=0,sel=0;col<columnas;col++,sel++){
if(col!=id)
datos[sel] = (String) modelo.getValueAt(row, col);
else
sel--;
}
tmp.addRow(datos);
}
return tmp;
}
При вызове:
DefaultTableModel mo = removeCol(i);
tblTrans = new JTable(mo);
Один из способов - предоставить новый «TableModel» с теми же данными, за исключением одного столбца меньше. Возможно, лучший способ - создать пользовательскую модель таблицы, которая позволяет настраивать видимость столбцов и настраивать столбцы columnCount и соответствующие столбцы во время выполнения. –
Я попытался сделать первый вариант, но после получения исправленного TableModel (проверено с помощью отладчика, так что данные, столбцы и все в порядке) Я не могу заставить JTable показать новую модель, она показывает старую модель: S (Подробности в моем сообщении) –
Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –