2016-08-03 49 views
0

我正在编写一个GUI。在那个GUI中,我有一个下拉框可以选择不同的人。每个人都有一个CardLayout窗格,并在该窗格中包含关于他们自己和他们所拥有的东西的信息。分离多个JTables

我已经写了一个名为PanelTableItems(Person person)类。

在节目开始我使用这个类来创建这些表的复式(每个人在我的计划)。每个CardLayout窗格都有这些表格之一。我刚刚实现了一个ListSelectionListener来存储最后一个选定的行,我正在使用一个私有函数来从表中选择项目。然而,当我实现这个选择监听器时,我尝试了一个打印,出于某种原因,似乎如果我的程序中有两个人,即使“第二个”表不在视图中,选择监听器也会进行两次打印。

这里是我的问题:

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

我可以发布一个MCVE,但是这是一个多实际编码问题的理论/解决问题。

在此先感谢。

+0

我'每个人都有CardLayout窗格并在窗格与自己和事物信息的表,他们own.'与RowFilter,它代替== JTable中'而且每个CardLayout窗格有以下tables.'之一,因为你可以从JTables视图中删除列,数据仍然可以从模型访问,您可以存储大量数据 – mKorbel

回答

3

在人的选择,你可以只切换可见面板:

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

所以,你应该已经在布局中每一个与关于它代表了人不同的ID注册的面板。

隐藏(不可见)的面板没有得到任何用户输入 - 如果你看到那么这样的行为你的代码做了什么。

在ListSelectionListener需要过滤处理只新的东西被选中的事件。

+0

再次考虑我的代码后,我发现您所说的是正确的。是的,这是我的ListSelectionListener,让我不确定发生了什么,因为它似乎在原始表上选择了新的东西时对两个jtables做出响应。但我不知道为什么。 – Zeliax

0

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