在Java中“交换”组件的正确方法

我试图做到这一点,当用户点击我的GUI上的东西(它与什么无关)时,一个JTable将消失,另一个JComponent将替换它。

在我使用以下代码时, contentPanel是我设置为JFrame内容窗格的JPanel

 contentPanel.remove(table); contentPanel.add(component, BorderLayout.CENTER); contentPanel.updateUI(); 

哪个工作完美,但我只是想确认这是正确的方法。 我的意思是,我想不出任何其他方式来实现它,但这并不一定意味着什么,如果有更好的方法,在性能或任何方面,我想知道它…

不,那不是这样做的方式。 你永远不应该调用updateUI()。 阅读API,该方法仅在您更改LAF时使用。

添加/删除组件后,您应该:

 panel.add(...); panel.revalidate(); panel.repaint(); // sometimes needed 

(这是无关紧要的),一个JTable将消失,另一个JComponent将取代它。

也许它是相关的。 通常,JTable显示在JScrollPane中。 所以也许更好的解决方案是使用:

 scrollPane.setViewportView( anotherComponent ); 

然后滚动窗格将为您进行validation。

更好的方法是使用CardLayout,并添加两个表,然后只显示正确的卡/表。