java JTable已被替换(?),但尽管重新验证并重新绘制,仍未刷新
下面是SSCCE,假设您在GNU/Linux上,请看看您是否能回答我下面的问题。将两个文件保存到“/tmp/aaa/some/packagepackagea/Test.java”和“/tmp/aaa/some/packagepackagea/DataHandler.java”或修复路径。 我已经测试了它的编译和运行 请用数据填写表格,或按“保存”(硬编码路径(“/tmp/aaa/testdata”))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表?若我理解正确,
是因为最后的JTable表?若我理解正确,若表是最终的,那个么
d.load(“/tmp/aaa/test”,表“;”)代码>将副本(或引用?)传递给DataHandler(d)加载函数。在这个函数中,我试图分配给最终变量(?),或者更确切地说,分配给在函数退出后得到GC’ed的引用,所以这就是为什么我的表在加载后没有任何内容
但这并没有起到同样的作用。您正在创建一个新表,它不会替换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);