0

そのため、ボタンが各タブパネルを通過するようにしようとしていますが、うまく機能します。ここで、タブの 1 つが最後に到達するたびに、タブの実行を繰り返さなければなりません。「前へ」ボタンを機能させましたが、機能しますが、「次へ」ボタンを機能させるための正しい数値式を取得できないようです。私は多くの異なる数値表現を試しましたが、これは私がこれまでに持っているものです:

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

ようやく動かせるようになると最後のタブを飛ばしてしまうので、何が悪いのかよくわからないのですが、数値表現のせいな気がします。

4

1 に答える 1

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);                         
                }
            });
于 2013-08-08T02:08:55.570 に答える