2013-08-08 3 views
0

Так что я стараюсь, чтобы кнопки проходили через каждую из моих панелей вкладок, и все работает отлично. Теперь я должен заставить их повторять ход через вкладки каждый раз, когда одна из вкладок достигает конца. Я сделал «предыдущую» кнопку, и она работает, но я не могу получить правильное числовое выражение, чтобы заставить «следующую» кнопку работать. Я пробовал много различных числовых выражений, но это то, что я до сих пор:Почему я не могу заставить setSelectedIndex работать?

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 

Когда я, наконец, заставить его работать, он пропускает последнюю вкладку, поэтому я действительно не знаю, что я делаю неправильно, но у меня есть чувство из-за числового выражения.

ответ

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

(нит выбор) Я бы, наверное, один вызов 'tabs.setSelectedIndex' и изменить значение индекса в соответствии с требованиями ... но это только мне;) – MadProgrammer

+0

@nachokk Спасибо, что на самом деле это сделал , Таким образом, цикл if устанавливает текущую позицию индекса, а также возвращает позицию индекса. Правильно? – Mandygir

+0

@MadProgrammer, вот что я пытался сделать, но он продолжал пропускать последнюю вкладку, и я не знаю почему. – Mandygir