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

时间:2011-12-22 19:39:43

标签: java swing user-interface

我正在尝试这样做,以便当用户点击我的GUI上的内容(这与什么无关)时,一个JTable将消失,另一个JComponent将替换它。

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

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

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

2 个答案:

答案 0 :(得分:16)

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

添加/删除组件后,您应该执行以下操作:

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

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

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

scrollPane.setViewportView( anotherComponent );

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

答案 1 :(得分:7)

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