gpt4 book ai didi

java - JTabbedPane - 带有关闭按钮引用的选项卡

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:21 24 4
gpt4 key购买 nike

我想用JAVA构建一个选项卡式界面,每个选项卡上都有关闭按钮。为此,我使用了以下类:ButtonTabComponent

我的 GUI 上有一个按钮,可以创建一个新选项卡。假设我按“新建选项卡”按钮 4 次,因此创建了 4 个选项卡:

<强>|选项卡 0 |选项卡 1 |选项卡 2 |选项卡 3 |(每个选项卡包含一个关闭按钮)

现在,我决定关闭选项卡 1,问题出现了,当我关闭中间选项卡时,所有索引都会重新排序 - 这意味着:

<强>|选项卡 0 |选项卡 2 |选项卡 3 |(选项卡 2 将具有索引 1)

如果我现在尝试创建一个新选项卡,则会创建该选项卡,但新选项卡:

<强>|选项卡 0 |选项卡 2 |选项卡 3 |选项卡 1|(选项卡 1 没有关闭按钮)

如果我再次单击“新选项卡”,我会得到:

<强>|选项卡 0 |选项卡 2 |选项卡 3 |选项卡 1 |选项卡 4 |(选项卡 4 很好,它有一个关闭按钮)

现在我决定关闭选项卡 2,我得到:

<强>|选项卡 0 |选项卡 3 |选项卡 1|选项卡 4|(选项卡 3 现在将具有索引 1)

如果我创建一个新选项卡:

<强>|选项卡 0 |选项卡 3 |选项卡 1|选项卡 4|选项卡 1 |(最后一个选项卡同样没有关闭按钮)。

我相信这是由索引引起的,我在 stackoverflow 上读到了类似的问题:stackoverflow.com/questions/15312252/jtabbedpane-arrayindexoutofboundsexception一个可能的解决方案是:

Pass a reference to the tab item, not its index on the tabbed pane, to the listener.

我不知道该怎么做。如果有人有任何提示,我真的非常非常感激。我需要为每个选项卡保留可靠的引用,因为每个选项卡都会打开一个文件,并且能够保存到文件,显然选项卡索引不可靠。

编辑:我在代码中添加新选项卡的方式是:

...//main class
private final JTabbedPane pane = new JTabbedPane();
//I am using an array to store the tabs created
//I initialize the array with false. the idea was that when a new tab get created, one item in the array
//gets the true value. when the tab is closed, the array item (based on the index) is set back to false
arrTabList = new boolean[10];
for(int i=0; i<10; i++){
arrTabList[i] = false;
}

...


public void newFile() //this function opens a new tab
{
//parse the array to check the first item with false status
for(int i=0; i<10; i++){
if(!arrTabList[i]) {
System.out.println("false");
PanelCounter = i;
break;
}
}
newTab t = new newTab(); //object which contains the tab content (a bunch of graphical components, input fields mostly)
pane.add("New Entry" + PanelCounter, t.createContentPane()); //adds the new tab to the main window
pane.setTabComponentAt(PanelCounter, new ButtonTabComponent(pane, this));
arrTabList[PanelCounter] = true; //sets the item array to true
}

//when a tab is closed, this function is called in the listener:
public void decreaseCounter(int i)
{
arrTabList[i] = false; //sets the item array back to false
}

最佳答案

错误在于调用

pane.setTabComponentAt(PanelCounter, new ButtonTabComponent(pane, this));

您不想将该按钮添加到选项卡索引 PanelCounter 中,而是添加到刚刚创建的选项卡索引中。它的索引可以使用 getTabCount() 获得,当然此时索引太高了,因此:

pane.setTabComponentAt(pane.getTabCount()-1, new ButtonTabComponent(pane, this));

关于java - JTabbedPane - 带有关闭按钮引用的选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16822898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com