gpt4 book ai didi

java - 从 JTable 中删除列

转载 作者:行者123 更新时间:2023-11-30 05:53:34 24 4
gpt4 key购买 nike

我正在制作一个与图形相关的程序,因此我需要从 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);

最佳答案

adjacency matrixAbstractTableModel 中可能更容易操作,您可以在其中显式操作行以省略一列。概括地说,

class MatrixModel extends AbstractTableModel {

private int rows;
private int cols;
private Boolean[][] matrix;

MatrixModel(int rows, int cols) {
this.rows = rows;
this.cols = cols;
matrix = new Boolean[rows][cols];
}

public void deleteColumn(int col) {
for (Boolean[] row : matrix) {
Boolean[] newRow = new Boolean[row.length - 1];
// TODO: copy remaining values
row = newRow;
}
this.fireTableStructureChanged();
}
...
}

关于java - 从 JTable 中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com