繁体   English   中英

Java JTable AttributiveCellTableModel 添加行

[英]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

那么模型会覆盖DefaultTableModeladdRow( 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM