繁体   English   中英

在选择选项卡上更改JTabbedPane组件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM