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

2022-09-04 07:27:01

我试图做到这一点,以便当用户在我的GUI上单击某些内容(这与什么无关)时,一个将消失,另一个将替换它。JTableJComponent

目前,我正在使用以下代码,其中 i 设置为 的内容窗格:contentPanelJPanelJFrame

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

这很完美,但我只是想确认这是正确的方法。我的意思是,我想不出任何其他方法来实现它,但这并不一定意味着什么,如果有更好的方法来做到这一点,就性能或任何事情而言,我喜欢了解它......


答案 1

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

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

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

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

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

scrollPane.setViewportView( anotherComponent );

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


答案 2

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


推荐