[英]Java JTable AttributiveCellTableModel add row
我正在使用 AttributiveCellTableModel 合并表格中的单元格。
http://www-st.inf.tu-dresden.de/SalesPoint/v3.1/faq/SwingExamples/html/jtable4.html
但问题是,
model.addRow(new Object[]{the values});
不起作用。 它与 DefaultTableModel 一起工作,但不适用于此 AttributiveCellTableModel。
有谁知道如何解决这个问题?
提前致谢
mirisbowring
那么模型会覆盖DefaultTableModel
的addRow( Vector )
方法,但不会覆盖addRow( Object[] )
方法。
所以这意味着你需要修改代码并自己实现 addRow addRow( Object[] )
方法。
这样做的方法是创建一个Vector
,然后将Array
中的项目复制到Vector
。 然后您可以调用模型的addRow( Vector )
方法。
就像是:
@Override
public void addRow(Object[] arrayRow)
{
Vector vectorRow = new Vector(arrayRow.length);
for (...)
// copy each item in the array to the vector
addRow( vectorRow );
}
对于动态添加,您应该修复几个错误:
public void setDataVector(Vector newData, Vector columnNames) {
if (newData == null)
throw new IllegalArgumentException("setDataVector() - Null parameter");
dataVector = new Vector(0);
dataVector = newData;
// 2021/02/03 Bug fix.
//setColumnIdentifiers(columnNames);
columnIdentifiers = columnNames;
cellAtt = new DefaultCellAttribute(dataVector.size(),
columnIdentifiers.size());
newRowsAdded(new TableModelEvent(this, 0, getRowCount()-1,
TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT));
}
@Override
public void addRow(Vector rowData) {
insertRow(getRowCount(), rowData);
}
@Override
public void insertRow(int row) {
int[][][] oldSpan = span;
int numRows = oldSpan.length;
int numColumns = oldSpan[0].length;
span = new int[numRows + 1][numColumns][2];
//2021/02/03 Bug fix.
//if (0 < row) {
// System.arraycopy(oldSpan,0,span,0,row-1);
//}
//System.arraycopy(oldSpan,0,span,row,numRows - row);
if (row == numRows) {
System.arraycopy(oldSpan,0,span,0,numRows);
} else {
System.arraycopy(oldSpan, 0, span, 0, row);
System.arraycopy(oldSpan, row, span, row + 1, numRows - row);
}
for (int i=0;i<numColumns;i++) {
span[row][i][CellSpan.COLUMN] = 1;
span[row][i][CellSpan.ROW] = 1;
}
//2021/02/03 Bug fix.
rowSize++;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.