【问题标题】:Separating multiple JTables分离多个 JTable
【发布时间】:2016-08-03 12:28:01
【问题描述】:

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

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

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

这是我的问题:

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

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

提前致谢。

【问题讨论】:

  • 对我来说Each person has a CardLayout Pane and in that Pane a table with information about themselves and things they own. == JTable 使用 RowFilter 而不是 And each CardLayout Pane has one of these tables.,因为您可以从 JTables 视图中删除列,数据仍然可以从模型中访问,您可以在那里存储大量数据

标签: java swing jtable cardlayout


【解决方案1】:

在人物选择上,您可以通过以下方式切换可见面板:

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

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

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

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

【讨论】:

  • 再次考虑我的代码后,我发现你说的是对的。是的,正是我的 ListSelectionListener 让我不确定发生了什么,因为当在原始表上选择了新的东西时,它似乎对两个 jtables 都有响应。但是我不知道为什么。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多