2015-06-03 1 views
0

У меня есть группа кнопок цикла генерируется сделанный с этим кодомКак идентифицировать кнопку в группе сгенерированных петлями кнопок?

this.panelCuerpo.setLayout(new GridLayout(4,5)); 
    for(int i = 1; i<=20; i++){ 
     final JToggleButton b = new JToggleButton(new ImageIcon("/images/available.png"));    
     panelCuerpo.add(b); 

     b.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/available1.png"))); 
     b.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent evt){      
       if(b.isSelected()){ 
        b.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/busy1.png"))); 
        cantidadBoletas++;       
       }else{ 
        b.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/available1.png"))); 
        cantidadBoletas--; 
       } 
       System.out.println(cantidadBoletas); 
      } 
     }); 
    } 

Проблема здесь состоит в том, что я не могу использовать SetText() для сравнения позже причина нет никакой собственности, чтобы скрыть этот текст. Как я могу сравнить его позже?

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

ответ

4

вы можете:

  • Используйте Action API, который позволяет запускать selected состояния соответствующей кнопки. Это позволяет вам деактивировать кнопку из основного «действия», которое она должна выполнить. Взгляните на How to Use ActionsHow to Use Actions для получения более подробной информации
  • Используйте actionCommand недвижимость JButton. Это позволяет иметь какое-то «идентификатор», связанный с кнопкой, которая не зависит от текста
  • Используйте массив или List сохранить ссылку на кнопки
+0

я решил использовать второй вариант, то был тем, что я искал, но я не могу сохранить последовательный номер. Это всегда будет «1 - 0» (1 правильно, 0 - нет. Каждая кнопка должна иметь свой номер). Есть идеи? –

+0

Использовать «i» из цикла? – MadProgrammer

+0

'for (int i = 0; i <= 19; i ++) { final JToggleButton b = новый JToggleButton (новый ImageIcon ("/images/available.png ")); panelCuerpo.add (b); b.setActionCommand (String.valueOf (1 + i)); b.setIcon (новый javax.swing.ImageIcon (getClass(). GetResource ("/ Images/available1.png"))); b.addActionListener (new ActionListener() {' Он не принимает его, всегда 0 –

2

Вы можете сохранить List<JToggleButton> из JToggleButton и получить элемент позже index. Кроме того, вместо добавления ActionListener в цикл вы можете реализовать ActionListener, который может использоваться для всех кнопок, и вам просто нужно написать b.addActionListener(this); в цикле.

ПРИМЕЧАНИЯ: лучше начать с i = 0 вместо 1

Смежные вопросы