Java的。 JTable setValueAt数据不更新

时间:2013-09-09 07:41:38

标签: java swing jtable abstracttablemodel

我尝试使用JTable,但是当我调用setValueAt时,方法数据不会在gui中更新。我尝试找到的答案超过5个小时,但任何事情都有助于我。

我尝试更新UI和fireTableDataChanged()但是id无效。

我使用AbstractTableModel,我的构造函数是JTable(MemoryTableModel)。 看看我的MemoryTableModel代码:

我做错了什么,或者我忘记了什么?

(抱歉我的英文,不是我的母语)

public class MemoryTableModel extends AbstractTableModel {

private static final long serialVersionUID = 1L;
ArrayList<ArrayList<Object>> memoryCells;
String[] columnNames = {"Offset", "0", "1", "2", "3", "4", "5", "6", "7", "8",
        "9", "A", "B", "C", "D", "E", "F"};

public MemoryTableModel(byte[] data, int cells) {
    super();
    memoryCells = new ArrayList<ArrayList<Object>>();
    for (int i=0; i< cells/16; i++) {
        ArrayList<Object> a = new ArrayList<Object>();
        a.add(i);
        for (int j=0; j<16; j++) {
            a.add(data[i*16+j]);
        }
        memoryCells.add(a);
    }
}

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

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

public String getColumnName(int col){
    return columnNames[col];
}

@Override
public Object getValueAt(int line, int column) {
    return memoryCells.get(line).get(column);
}
@Override
public void setValueAt(Object cell, int row, int column) {
    memoryCells.get(row).set(column, cell);
    fireTableDataChanged();
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
    if (columnIndex == 0)
        return false;
    return true ; 
}

1 个答案:

答案 0 :(得分:4)

  • fireTableDataChanged();的通知setValueAt(Object cell, int row, int column) {错误

  • 您需要在链接的API

  • 中使用fireTableCellUpdated,更多内容
  • 使用DefaultTableModelVectorutil.List作为AbstractTableModel

  • 的下层数组,以便更轻松地解决方法

修改

  • public boolean stopCellEditing() {非常常见的问题,我希望有像JTable.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
  • 这样的东西