[英]Change JTabbedPane component on select tab
我有一个JTabbedPane,当用户选择它时,我需要替换选项卡1组件。 我无法在应用程序启动时直接添加正确的组件,因为我没有完整的数据来生成它。
我需要这样的东西:
int tabTochange = 1;
tabbedPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
if (tabbedPane.getSelectedIndex() == tabTochange)
{
JComponent component = generataComponent();
tabbedPane.removeTabAt(tabTochange); // Remove old tab
// add new one
tabbedPane.insertTab("title", null, component, "tip", tabTochange);
}
}
});
但是此代码不起作用,它会删除选项卡1之后的其他选项卡并将其复制。
代替removeTabAt()
和insertTab()
,可以使用getComponentAt(tabTochange)
或getSelectedComponent()
获取对组件的引用。 根据需要更新组件,也许使用CardLayout
。
我认为JTabbedPane / CardLayout是作为静态GUI开发的,无需添加/删除/修改选项卡/卡,即使有可能也不更改数量,顺序,选项卡/卡的数量
您将需要解决一系列副作用,以将选项卡(索引及其JComponents)保存在辅助数组中
将JList(取决于JTree的结构)放在JFrame的左侧,为每个Items / Node创建一个JPanel,将这些JPanels放入CardLayout,添加适当的List(Tree)SelectionListener,然后从鼠标/键盘中进行选择将在卡之间触发切换,该结构中没有任何内容是动态的(JComponents中的值除外),一切都在GUI启动时准备好
如果tab1的索引为1,而tab2的索引为2。删除tab1之后,tab2的索引现在不是1吗? 因此,当您添加索引为1的新标签时,它将无法正常工作。 也许有一种方法可以只更改tab1。
另外,每个选项卡都应包含一个JPanel,因此仅更改相关的JPanel和选项卡的标题文本可能值得。
我知道这并不能完全回答您的问题,但是我认为我没有足够的观点将其作为评论。 希望这可以帮助 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.