【问题标题】:Find out which checkbox was selected in custom component tabs找出在自定义组件选项卡中选中了哪个复选框
【发布时间】:2016-05-01 23:33:01
【问题描述】:

考虑两个类:

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 类,我们假设它具有显示简单框架所需的所有字段和方法。在这堂课中,我们还有:

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,但我真的不知道如何实现“标签内容”。描述以前我们有:

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 类中有错字

【问题讨论】:

  • JCheckBox 与标签有什么关系?它们是否包含在选项卡标题中?标签本身?还是分开的?
  • 选项卡标题,如带有自定义组件的选项卡部分中的此处docs.oracle.com/javase/tutorial/uiswing/components/…
  • 从概念上讲,你可以做类似this
  • 嗯,明天试试,谢谢

标签: java swing jtabbedpane


【解决方案1】:

在疯狂程序员的评论的帮助下,我设法实现了我想要的

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++;
        }
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 2010-11-20
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多