我正在写一个GUI。在那个GUI中我有一个下拉框,我可以在其中选择不同的人。每个人都有一张CardLayout窗格,在该窗格中有一张表格,上面有自己和他们拥有的东西的信息。
我写了一个名为PanelTableItems(Person person)
的课程。
在程序启动时,我使用这个类来创建这些表的多个表(我的程序中每个人都有一个表)。每个CardLayout窗格都有这些表格中的一个。我刚刚实现了ListSelectionListener
来存储最后选择的行,我使用私有函数从表中获取所选项。然而,当我实现这个选择监听器时,我尝试使用打印,出于某种原因,似乎如果我的程序中有两个人,则选择监听器进行了两次打印,即使“第二”表不在视图中,因此未被选中。 / p>
如何确保仅使用CardLayout操作当前处于“视图”的表格?第二个窗格是隐藏的,但似乎所有对第一个窗格的函数调用也设法在第二个窗格上运行,因为它们属于同一类型。
我可以发布一个MCVE,但这更像是一个理论/解决方案问题,而不是一个实际的编码问题。
提前致谢。
答案 0 :(得分:3)
在人员选择上,您只需切换可见面板:
CardLayout cl = (CardLayout) cards.getLayout();
cl.show(cards, "idOfTheSelectedPersonPanel");
因此,您应该已经在布局中注册了这些面板,每个面板的ID都与其所代表的人不同。
隐藏(不可见)面板无法获得任何用户输入 - 如果您看到这样的行为,那么您的代码会出错。
在ListSelectionListener中,您需要进行过滤以仅处理选择了新内容的事件。
答案 1 :(得分:0)
我建议你重新检查你将卡片组件添加到卡片中的方法,你可能会将所有表格添加到同一个容器中,只有最后一个可见,尝试将每个表格添加到JPanel或JScrollPane。