为什么我不能使setSelectedIndex工作?

时间:2013-08-08 02:00:47

标签: java swing tabs indexing actionlistener

所以我试图让按钮遍历我的每个标签面板,它工作得很好。现在,每当其中一个标签到达结尾时,我必须让它们重复运行标签。我使“上一个”按钮工作,它工作,但我似乎无法得到正确的数字表达式使“下一个”按钮工作。我尝试了很多不同的数字表达式,但这是我到目前为止所做的:

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

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

1 个答案:

答案 0 :(得分:3)

你应该对边缘情况使用一个循环。

像这样。

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