Java 为什么尽管有validate()和repaint(),我的JScrollpane仍不更新删除更改

Java 为什么尽管有validate()和repaint(),我的JScrollpane仍不更新删除更改,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,我现在有一个可怕的问题,它正在毁掉我的程序。似乎我可以通过具有自定义模型的Jtable向滚动窗格添加元素。当我添加元素、表更新和行出现等时,这很好。真正的问题是当我删除元素时,无论发生什么,它都不会更新表。事实上,如果我最小化小程序,然后再次打开它,所有元素现在都消失了,但是!问题是,如果我尝试添加新元素,它们不会出现在滚动窗格上,即使在我添加新元素时数组大小确实会增加,并在打印新元素时显示它们。我尝试了很多东西(你会看到我的重新油漆等),但不知道我还能做什么。谢谢你的帮助:) 这是JTable

我现在有一个可怕的问题,它正在毁掉我的程序。似乎我可以通过具有自定义模型的Jtable向滚动窗格添加元素。当我添加元素、表更新和行出现等时,这很好。真正的问题是当我删除元素时,无论发生什么,它都不会更新表。事实上,如果我最小化小程序,然后再次打开它,所有元素现在都消失了,但是!问题是,如果我尝试添加新元素,它们不会出现在滚动窗格上,即使在我添加新元素时数组大小确实会增加,并在打印新元素时显示它们。我尝试了很多东西(你会看到我的重新油漆等),但不知道我还能做什么。谢谢你的帮助:)


这是JTable中的一个常见问题,我通常在执行所有代码后重置可见性

JTable.setVisible(false)
JTable.setVisible(true)

它对我有用

modelx.removeElementAt(newbiex.getSelectedRow());
TableModel没有此名称的方法,因此必须创建自定义方法。确保此方法调用
fireTableRowsDeleted(…)
。您可以随时查看DefaultTableModel的源代码,以了解这是如何实现的

newbiex.repaint();
newbiex.revalidate();
newbiey.repaint(); ///table on another tab using modelx///
newbiey.revalidate();///table on another tab///
playerViewer.repaint();
playerViewer.revalidate();
以上代码都不需要。如果从模型中触发适当的事件,表将自动重新绘制自身

如果我最小化小程序,然后再次打开它,所有元素现在都消失了,但是!问题是,如果我尝试添加新元素,它们不会出现在滚动窗格上,即使在我添加新元素时数组大小确实会增加,并在打印新元素时显示它们。我尝试了很多东西(你会看到我的重新油漆等),但不知道我还能做什么。谢谢你的帮助:)

我想说您的TableModel实现不正确。尝试使用
DefaultTableModel
。它支持动态添加/删除行


或者你可以退房。您只需要实现几个方法。JButtonTableModel给出了一个简单的例子来说明如何做到这一点。

-1,没有必要做类似的事情。更新TableModel时,JTable会自动重新绘制自身。您必须确保您的TableModel触发适当的事件。我希望它对我有用:(我试过了,我觉得问题更根本,因为我只从行中删除了2个元素后,列名也会自动删除。更详细地说,在我删除第一项后,滚动窗格条也会消失。我完全困惑了。你是说用DefaultTableModel代替HumanListModel吗?我不知道你的da是什么意思。)ta就像。很多时候你可以只使用DefaultTableMdoel。否则,我建议你不正确地实现HumanListModel。因此你需要解决问题。我还建议你可以使用RowTableModol,而不是从头创建模型,只实现一些方法。RowTableModel还支持动态添加关于/删除行。无论你决定什么,你都需要更好地理解如何使用TableModels。谢谢camickr,我会接受你的建议,@mKrobel,我已经阅读了SSCCE,我的原始帖子有什么问题,不确定为什么不是SSCCE,我实际上已经阅读了SSCCE…我正在尝试使用ListTableModel,但是,它们似乎没有getSelectedRo我需要的w()方法,因为它依赖于我高亮显示一个项目并添加到另一个表中…TableModel与行选择无关。当用户单击行时,JTable已经支持行选择。如果要手动选择行,请参阅JTable.getSelectionModel()并对ListSelectionModel进行更改。该表还有返回当前所选索引的方法。请阅读API。这不是
SSCCE
。我们如何编译和执行此代码?
newbiex.repaint();
newbiex.revalidate();
newbiey.repaint(); ///table on another tab using modelx///
newbiey.revalidate();///table on another tab///
playerViewer.repaint();
playerViewer.revalidate();