找出在自定义组件选项卡中选中了哪个复选框
Find out which checkbox was selected in custom component tabs
考虑两个 classes:
public class Test
{
private boolean skip = false;
private JLabel label = "";
public boolean isSkipped()
{
return skip;
}
public void setSkipped(boolean skip)
{
this.skip = skip;
}
public void setLabel(String string)
{
label.setText(string);
}
}
和 MainWindow
class 我们假设它具有显示简单框架所需的所有字段和方法。在这个 class 我们还有:
private JTabbedPane tabPane = new JTabbedPane();
private ArrayList<Test> test = new ArrayList<>();
for(int i = 0; i < 30; i++)
{
test.add(new Test());
}
JPanel checkBoxTab = new JPanel();
JCheckBox checkBox = new JCheckBox();
checkBox.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if(e.getStateChange() == ItemEvent.SELECTED)
{
test.get(?).setSkipped(true);
}
if(e.getStateChange() == ItemEvent.DESELECTED)
{
test.get(?).setSkipped(false);
}
for(int j = 0, k = 1; j < test.size(); j++)
{
if(test.get(j).isSkipped())
{
continue;
}
test.get(j).setLabel("" + k);
k++;
}
}
});
checkBox.setOpaque(false);
checkBoxTab.add(checkBox);
checkBoxTab.setOpaque(false);
for(int i = 0; i < test.size(); i++)
{
tabPane.addTab("", test.get(i));
tabPane.setTabComponentAt(i, checkBoxTab);
}
我的问题是:如何将 ?
符号替换为具有所选复选框的选项卡索引?我需要在程序 运行 期间动态找到它。此代码的目的是找出选择要跳过的选项卡,跳过它而不将下一个 k 数字分配给标签并将下一个 k 数字分配给下一个选项卡中的标签(假设它未标记为跳过,并且如果它是 - 重复之前的过程)。我试图在此处 Close the clicked tab, not the currently selected tab JTabbedPane 了解解决方案,但我真的不知道如何实施 "tab content" 事情。描述之前我们有:
tabCount: 0 1 2 3 4 5 6 7 8
skip: f t f t t f f f t
label: 1 2 3 4 5
编辑 抱歉 MainWindow
class
中有错别字
在 Mad Programmer 的评论的帮助下,我设法实现了我想要的东西
checkBox.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if(e.getStateChange() == ItemEvent.SELECTED)
{
test.get(tabbedPane.indexOfTab(tabName)).setSkipped(true);
}
if(e.getStateChange() == ItemEvent.DESELECTED)
{
test.get(tabbedPane.indexOfTab(tabName)).setSkipped(false);
}
for(int j = 0, k = 1; j < test.size(); j++)
{
if(test.get(j).isSkipped())
{
continue;
}
test.get(j).setLabel("" + k);
k++;
}
}
});
考虑两个 classes:
public class Test
{
private boolean skip = false;
private JLabel label = "";
public boolean isSkipped()
{
return skip;
}
public void setSkipped(boolean skip)
{
this.skip = skip;
}
public void setLabel(String string)
{
label.setText(string);
}
}
和 MainWindow
class 我们假设它具有显示简单框架所需的所有字段和方法。在这个 class 我们还有:
private JTabbedPane tabPane = new JTabbedPane();
private ArrayList<Test> test = new ArrayList<>();
for(int i = 0; i < 30; i++)
{
test.add(new Test());
}
JPanel checkBoxTab = new JPanel();
JCheckBox checkBox = new JCheckBox();
checkBox.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if(e.getStateChange() == ItemEvent.SELECTED)
{
test.get(?).setSkipped(true);
}
if(e.getStateChange() == ItemEvent.DESELECTED)
{
test.get(?).setSkipped(false);
}
for(int j = 0, k = 1; j < test.size(); j++)
{
if(test.get(j).isSkipped())
{
continue;
}
test.get(j).setLabel("" + k);
k++;
}
}
});
checkBox.setOpaque(false);
checkBoxTab.add(checkBox);
checkBoxTab.setOpaque(false);
for(int i = 0; i < test.size(); i++)
{
tabPane.addTab("", test.get(i));
tabPane.setTabComponentAt(i, checkBoxTab);
}
我的问题是:如何将 ?
符号替换为具有所选复选框的选项卡索引?我需要在程序 运行 期间动态找到它。此代码的目的是找出选择要跳过的选项卡,跳过它而不将下一个 k 数字分配给标签并将下一个 k 数字分配给下一个选项卡中的标签(假设它未标记为跳过,并且如果它是 - 重复之前的过程)。我试图在此处 Close the clicked tab, not the currently selected tab JTabbedPane 了解解决方案,但我真的不知道如何实施 "tab content" 事情。描述之前我们有:
tabCount: 0 1 2 3 4 5 6 7 8
skip: f t f t t f f f t
label: 1 2 3 4 5
编辑 抱歉 MainWindow
class
在 Mad Programmer 的评论的帮助下,我设法实现了我想要的东西
checkBox.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if(e.getStateChange() == ItemEvent.SELECTED)
{
test.get(tabbedPane.indexOfTab(tabName)).setSkipped(true);
}
if(e.getStateChange() == ItemEvent.DESELECTED)
{
test.get(tabbedPane.indexOfTab(tabName)).setSkipped(false);
}
for(int j = 0, k = 1; j < test.size(); j++)
{
if(test.get(j).isSkipped())
{
continue;
}
test.get(j).setLabel("" + k);
k++;
}
}
});