如果最低行被编辑,则将空行插入jtable

时间:2016-10-12 20:57:36

标签: java swing jtable abstracttablemodel

如果最低行被编辑,有没有办法总是插入一个空行? 我总是希望在底部有一个自由行,如果有人编辑了最低行,则应该自动插入一个新行。

我使用的是AbstractTableModel:

public class NativeTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private ArrayList<Spieler> myObjects = null;
private String[] columnNames = { "Vorname", "Nachname", "Trikotnummer" };

public NativeTableModel() {
    myObjects = new ArrayList<Spieler>(JNIResultSet.getMeineSpieler());
}

@Override
public int getRowCount() {
    return myObjects.size();
}

@Override
public String getColumnName(int index) {
    return columnNames[index];
}

@Override
public int getColumnCount() {
    return columnNames.length;
}

@Override
public boolean isCellEditable(int row, int col) {
    boolean retValue = false;
    if (col >= 1) {
        retValue = true;
    }
    return retValue;
}

@Override
public void setValueAt(Object value, int row, int col) {
    switch (col) {
    case 0:
        if (value instanceof String) {
            //
        }
        break;
    case 1:
        if (value instanceof Integer) {
            //
        }
        break;
    }
    fireTableCellUpdated(row, col);
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    Object value = "";
    Spieler s = this.myObjects.get(rowIndex);
    switch (columnIndex) {
    case 0:
        value = s.getVorname();
        break;
    case 1:
        value = s.getNachname();
        break;
    case 2:
        value = s.getTrikotnummer();
        break;
    }
    return value;
}

}

如何检查最低行是否为空,如果为空则插入新行?

1 个答案:

答案 0 :(得分:2)

建议:

  • 更改您的表模型以使用ArrayList作为其数据核,而不是一个不灵活的2D数组。
  • ArrayList的泛型类型应该是一个包含JTable单行数据的类。
  • 它应该有一个空的默认状态,表示没有数据的行。
  • 在表格模型的方法中更改数据时,请检查模型的最后一行,以查看此处列表所持有的对象是默认对象还是保留数据。
  • 如果它包含数据,请将新对象添加到列表中并调用相应的fireXxx通知方法。
  • 在setValue中,您可以检查rowCount,并将其与传递给方法的row参数进行比较。如果匹配,则添加新行。但是如果你这样做,你必须小心循环引用,因为添加新行也可能会调用setValue,因此你必须有逻辑存在以防止堆栈溢出。如果我们能够使用您的SSCCE
  • ,我们可以再次提供帮助