分离多个JTable

时间:2016-08-03 12:28:02

标签: java swing jtable cardlayout

我正在写一个GUI。在那个GUI中我有一个下拉框,我可以在其中选择不同的人。每个人都有一张CardLayout窗格,在该窗格中有一张表格,上面有自己和他们拥有的东西的信息。

我写了一个名为PanelTableItems(Person person)的课程。

在程序启动时,我使用这个类来创建这些表的多个表(我的程序中每个人都有一个表)。每个CardLayout窗格都有这些表格中的一个。我刚刚实现了ListSelectionListener来存储最后选择的行,我使用私有函数从表中获取所选项。然而,当我实现这个选择监听器时,我尝试使用打印,出于某种原因,似乎如果我的程序中有两个人,则选择监听器进行了两次打印,即使“第二”表不在视图中,因此未被选中。 / p>

这是我的问题:

如何确保仅使用CardLayout操作当前处于“视图”的表格?第二个窗格是隐藏的,但似乎所有对第一个窗格的函数调用也设法在第二个窗格上运行,因为它们属于同一类型。

我可以发布一个MCVE,但这更像是一个理论/解决方案问题,而不是一个实际的编码问题。

提前致谢。

2 个答案:

答案 0 :(得分:3)

在人员选择上,您只需切换可见面板:

CardLayout cl = (CardLayout) cards.getLayout();
cl.show(cards, "idOfTheSelectedPersonPanel");

因此,您应该已经在布局中注册了这些面板,每个面板的ID都与其所代表的人不同。

隐藏(不可见)面板无法获得任何用户输入 - 如果您看到这样的行为,那么您的代码会出错。

在ListSelectionListener中,您需要进行过滤以仅处理选择了新内容的事件。

答案 1 :(得分:0)

我建议你重新检查你将卡片组件添加到卡片中的方法,你可能会将所有表格添加到同一个容器中,只有最后一个可见,尝试将每个表格添加到JPanel或JScrollPane。