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

时间:2013-05-31 09:55:32

标签: java swing jtabbedpane

我有一个JTabbedPane,我需要在用户选择它时替换tab 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之后的其他选项卡并复制它。

3 个答案:

答案 0 :(得分:3)

使用removeTabAt()insertTab()代替getComponentAt(tabTochange)getSelectedComponent()来获取组件的引用。根据需要更新组件,可能使用CardLayout

答案 1 :(得分:2)

  • 我认为JTabbedPane / CardLayout是作为静态GUI开发的,没有添加/删除/修改标签/卡片,而不是在运行时更改数字,订单,标签/卡的数量,即使它可能

  • 你需要解决一堆副作用,在二级数组中保持标签(索引及其JComponents)

  • 将JList(JTree取决于结构)放在JFrame的左侧,为每个Items / Nodes创建一个JPanel,将这些JPanel放到CardLayout中,添加适当的List(Tree)SelectionListener,然后从鼠标/键盘中选择将在卡之间触发切换,此结构中的任何内容都不是动态的(JComponents中的值除外),所有内容都是在GUI启动时准备的

答案 2 :(得分:0)

如果tab1的索引为1,而tab2的索引为2.删除tab1后,tab2现在的索引是否为1?因此,当您添加索引为1的新选项卡时,它将无效。也许有一种方法可以改变tab1。

此外,每个标签应包含一个JPanel,因此更改相关的JPanel和标签的标题文本可能是值得的。

我知道这并没有完全回答你的问题,但我认为我没有足够的观点将其作为评论。希望这有帮助:)