java JTable已被替换(?),但尽管重新验证并重新绘制,仍未刷新

java JTable已被替换(?),但尽管重新验证并重新绘制,仍未刷新,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,下面是SSCCE,假设您在GNU/Linux上,请看看您是否能回答我下面的问题。将两个文件保存到“/tmp/aaa/some/packagepackagea/Test.java”和“/tmp/aaa/some/packagepackagea/DataHandler.java”或修复路径。 我已经测试了它的编译和运行 请用数据填写表格,或按“保存”(硬编码路径(“/tmp/aaa/testdata”)) 我想知道为什么我的JTable无法检索存储的内容? 是因为最后的JTable表?若我理解正确,

下面是SSCCE,假设您在GNU/Linux上,请看看您是否能回答我下面的问题。将两个文件保存到“/tmp/aaa/some/packagepackagea/Test.java”和“/tmp/aaa/some/packagepackagea/DataHandler.java”或修复路径。 我已经测试了它的编译和运行

请用数据填写表格,或按“保存”(硬编码路径(“/tmp/aaa/testdata”))

  • 我想知道为什么我的JTable无法检索存储的内容?
    是因为最后的JTable表?若我理解正确,若表是最终的,那个么
    d.load(“/tmp/aaa/test”,表“;”)将副本(或引用?)传递给DataHandler(d)加载函数。在这个函数中,我试图分配给最终变量(?),或者更确切地说,分配给在函数退出后得到GC’ed的引用,所以这就是为什么我的表在加载后没有任何内容
  • Test.java DataHandler.java 与


    但这并没有起到同样的作用。

    您正在创建一个新表,它不会替换GUI引用的表

    因此,稍微重写一下load方法,您可以在表上设置模型,如下所示:

    String rows[] = (buf.toString()).split("\n");
    
    DefaultTableModel tableModel = new DefaultTableModel();
    
    for (String col:rows[0].split(separator))
        tableModel.addColumn(col);
    
    for (int i = 1; i < rows.length; i++)
        tableModel.addRow(rows[i].split(separator));
    
    table.setModel(tableModel);
    
    Object item = tableModel.getValueAt(i,j);
    disk.write((item != null ? item.toString() : "") + separator);
    
    这样做:

    String rows[] = (buf.toString()).split("\n");
    
    DefaultTableModel tableModel = new DefaultTableModel();
    
    for (String col:rows[0].split(separator))
        tableModel.addColumn(col);
    
    for (int i = 1; i < rows.length; i++)
        tableModel.addRow(rows[i].split(separator));
    
    table.setModel(tableModel);
    
    Object item = tableModel.getValueAt(i,j);
    disk.write((item != null ? item.toString() : "") + separator);
    

    谢谢,这确实有效,我很感激(接受),但是你能详细说明为什么我的例子不起作用吗?我知道删除空项会破坏表的布局,所以需要空字符串(答案的第二部分),但不知道为什么加载错误,我甚至尝试了
    table.setModel(tableModel)但它不起作用-不知道为什么。当我构建新的
    DefaultTableModel(2,2)时,它开始“排序”(排序,可能是因为缺少空项,它被混淆了)使用不同的构造函数。主要问题(除了构建模型)是您正在重置
    参考
    表=新JTable()。但这并不会神奇地改变
    帧的引用。如果你真的想改变整个
    ,你需要替换框架中的那一个。那么,实际上是怎样的呢?我认为Java总是以引用的形式传递对象。所以,它不应该只是在相同的位置创建新对象(用相同的名称、表?或更新表所指向的位置,从addres,比如0x1234到0x2345)吗。或者像是,
    JScrollPane(表)存储的不是指针而是“字符串指针”,分配给表会在其他地方创建新对象,但JScrollPane查找地址不会更新吗?最后一件事——这是最后一件事——没有任何影响?我的意思是,这怎么可能做作业呢?Java是。谢谢……这确实为我解释了一些讨厌的事情。非常感谢。
    
    String rows[] = (buf.toString()).split("\n");
    
    DefaultTableModel tableModel = new DefaultTableModel();
    
    for (String col:rows[0].split(separator))
        tableModel.addColumn(col);
    
    for (int i = 1; i < rows.length; i++)
        tableModel.addRow(rows[i].split(separator));
    
    table.setModel(tableModel);
    
    Object item = tableModel.getValueAt(i,j);
    if (null != item)
        disk.write(item.toString() + separator);
    
    Object item = tableModel.getValueAt(i,j);
    disk.write((item != null ? item.toString() : "") + separator);