我有一个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之后的其他选项卡并复制它。
答案 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和标签的标题文本可能是值得的。
我知道这并没有完全回答你的问题,但我认为我没有足够的观点将其作为评论。希望这有帮助:)