【问题标题】:Why I cannot make the setSelectedIndex work?为什么我不能使 setSelectedIndex 工作?
【发布时间】:2013-08-09 14:52:15
【问题描述】:

所以我试图让按钮通过我的每个标签面板,它工作得很好。现在我必须让他们在每次标签之一到达末尾时重复运行标签。我使“上一个”按钮工作,它工作,但我似乎无法获得正确的数字表达式来使“下一个”按钮工作。我已经尝试了许多不同的数字表达式,但这是我目前所拥有的:

next = new JButton("next");
    next.addActionListener(
            new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                    tabs.setSelectedIndex(tabs.getSelectedIndex()+1);
                    tabs.setSelectedIndex(tabs.getSelectedIndex()-7);
                }
            });

    previous = new JButton("previous");
    previous.addActionListener(
            new ActionListener()
            {
                @Override
                public void actionPerformed(ActionEvent e)
                {
                        tabs.setSelectedIndex(tabs.getSelectedIndex()-1);
                        tabs.setSelectedIndex(tabs.getSelectedIndex()+6);
                }
            });

这是每次我尝试下一个按钮时给我的异常:

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: -6, Tab count: 6

当我终于让它工作时,它会跳过最后一个标签,所以我真的不知道我在做什么错,但我有一种感觉是因为数字表达式。

【问题讨论】:

    标签: java swing tabs indexing actionlistener


    【解决方案1】:

    对于边缘情况,您应该使用循环。

    类似的东西。

    next = new JButton("next");
        next.addActionListener(
                new ActionListener()
                {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                        int nextIndex = tabs.getSelectedIndex()+1;
                        tabs.setSelectedIndex( (nextIndex < tabs.getTabCount())?nextIndex:0 );                                                 
                    }
                });
    
        previous = new JButton("previous");
        previous.addActionListener(
                new ActionListener()
                {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {
                        int previousIndex = tabs.getSelectedIndex()-1;
                         tabs.setSelectedIndex((previousIndex < 0)?tabs.getTabCount()-1:previousIndex);                         
                    }
                });
    

    【讨论】:

    • (nit pick) 我可能会单独调用tabs.setSelectedIndex 并根据需要修改索引值......但这只是我;)
    • @nachokk 谢谢,确实做到了。所以if循环设置Index的当前位置,else返回Index的位置。对吗?
    • @MadProgrammer,这就是我想要做的,但它一直跳过最后一个标签,我不知道为什么。
    • @MadProgrammer 我也是,但是如果他还没有太多技能,我认为这样就很清楚了
    • @nachokk 正如我所说 - 挑剔;) - 这当然是正确的答案
    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 2012-01-15
    • 2012-08-03
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    相关资源
    最近更新 更多