JAVAJTable setValueAt数据未更新

JAVAJTable setValueAt数据未更新,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,我尝试使用JTable,但当我调用setValueAt方法时,gui中的数据不会更新。我试着在5个多小时内找到答案,但一切都对我有帮助 我尝试更新UI和fireTableDataChanged(),但id没有帮助 我使用AbstractTableModel,我的构造函数是JTable(MemoryTableModel)。 请看我的MemoryTableModel代码: 我做错了什么,还是忘记了什么 (对不起,我的英语不是我的母语) 公共类MemoryTableModel扩展了AbstractTa

我尝试使用JTable,但当我调用setValueAt方法时,gui中的数据不会更新。我试着在5个多小时内找到答案,但一切都对我有帮助

我尝试更新UI和fireTableDataChanged(),但id没有帮助

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

我做错了什么,还是忘记了什么

(对不起,我的英语不是我的母语)

公共类MemoryTableModel扩展了AbstractTableModel{
私有静态最终长serialVersionUID=1L;
ArrayList memoryCells;
String[]columnNames={“偏移量”、“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”,
“9”、“A”、“B”、“C”、“D”、“E”、“F”};
公共MemoryTableModel(字节[]数据,整数单元格){
超级();
memoryCells=newarraylist();
对于(int i=0;i
  • setValueAt(对象单元格,int行,int列){
    的通知程序
    fireTableDataChanged();
    错误

  • 您需要在链接API中使用更多

  • 为了更方便地使用
    DefaultTableModel
    Vector
    util.List
    作为
    AbstractTableModel

  • 编辑

    • public boolean stopCellEditing(){
      是一个非常常见的问题,我希望有类似于as
      JTable.putClientProperty(“TerminateedItoFocusLost”,boolean.TRUE);

    I
    m尝试过FireTableCell也很早就更新了,但它没有帮助。现在我发现了一个功能。如果我在一个过程中调用setValueAt方法,它可以
    s正常工作,但是如果我在另一个方法中调用setValueAt方法,它就不起作用了。然后用一个短的、可运行的、可编译的方法编辑你的帖子,删除我的呈现器balast,把你放在那里r表格模型。。。。
    
    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 ; 
    }