【发布时间】:2013-12-06 10:00:40
【问题描述】:
我有一个带有 5 个选项卡的 JTabbedPane。我在每个选项卡中添加了一个 JPanel,比如 5 个 JPanel,每个选项卡上有几个组件。如果我想根据标志变量动态更新选项卡内容,比如替换选项卡 4 上的内容,我需要用新的 Jpanel 替换现有面板,如何在特定选项卡上实现此动态更新?
【问题讨论】:
标签: java swing jtabbedpane
我有一个带有 5 个选项卡的 JTabbedPane。我在每个选项卡中添加了一个 JPanel,比如 5 个 JPanel,每个选项卡上有几个组件。如果我想根据标志变量动态更新选项卡内容,比如替换选项卡 4 上的内容,我需要用新的 Jpanel 替换现有面板,如何在特定选项卡上实现此动态更新?
【问题讨论】:
标签: java swing jtabbedpane
实现这一目标的可能性更多。
第一种可能是替换窗格的内容。假设您已添加要更新的窗格,如下所示:
this.content = new JPanel();
this.content.add(new JLabel("Content1"));
myPane.addTab("Tab1", this.content);
然后你可以改变标签的内容:
this.content.removeAll();
this.content.add(new JLabel("Content2"));
this.content.revalidate();
this.content.repaint();
第二种可能性是完全删除标签,然后添加一个带有新内容的新标签。
myPane.removeTabAt(index);
myPane.addTab("New Tab", newContent);
通常我更喜欢第一种可能性。
【讨论】:
Generally I would prefer the first possibility - 除了代码不起作用。当您从可见 GUI 添加/删除组件时,您需要 revalidate() 和 repaint() 面板以确保调用布局管理器,然后重新绘制组件。
在我能够区分 JTabbedPane 的 getComponentAt 和 getTabComponentAt 方法之前,我与这个愚蠢的问题斗争了一天。仅供参考,第一个获取选项卡的内容,后者获取选项卡的标题栏组件-.- 我用过这样的东西:
//create new content for tab
JPanel tabPanel = generateTab();
//assign new content to tab
tabbedPane.setComponentAt(index, tabPanel);
【讨论】: