java jtabbedpane 关闭_JTabbedPane-具有关闭按钮参考的选项卡

我想在JAVA中建立一个带标签的界面,每个标签上都带有关闭按钮。为此,我使用了以下类:ButtonTabComponent

我的GUI上有一个按钮,用于创建新标签。假设我四次按下“新建标签”按钮,因此创建了四个标签:

| 标签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上读了一个类似的问题,可能的解决方案是:

将对选项卡项的引用而不是其在选项卡式窗格中的索引传递给侦听器。

我不确定该怎么做。如果有人有任何暗示,我将非常感谢。我需要为每个选项卡保持可靠的引用,因为每个选项卡都会打开一个文件,并且具有保存到文件的能力,而且选项卡索引显然不可靠。

编辑:我在代码中添加新标签的方式是:

...//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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值