2013-04-06 1 views
0

Я пишу программу, и я столкнулся с проблемой, ...JButton Массив ActionListener Выпуск

создать 1 JLabel массив и 1 JButton массив. В массиве JLabel содержится строка, название клуба. Массив JButton содержит строку, которая просто говорит «Изменить».

В цикле For заполняется каждый массив на основе длины массива клубов, а также добавляется прослушиватель действий для каждой кнопки.

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

Поскольку прослушиватель событий не знает, что он внутри цикла, я не могу его использовать.

Как достичь цели, которую я хочу?

См. Следующий код.

JLabel clubs[]  = new JLabel[99]; 
JButton editAClub[] = new JButton[99]; 

for(int i=0; i <= (allClubs.length - 1);i++) 
{ 
    clubs[i]  = new JLabel("Club " + i); 
    editAClub[i] = new JButton("Edit"); 
    editAClub[i].addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      selectedClub = clubs[i].getText().toString(); 
      System.out.println(selectedClub); 
     } 
    }); 
} 
+1

Что случилось с текущим кодом? –

+0

Вы не можете использовать i внутри actionListener. –

ответ

1

Я хотел бы создать карту Пуговицы и JLabels и передать источник действия в ActionListener:

JLabel clubs[]  = new JLabel[99]; 
JButton editAClub[] = new JButton[99]; 

//create a map to store the values 
final HashMap<JButton,JLabel> labelMap = new HashMap<>(); //in JDK 1.7 

for(int i=0; i <= (allClubs.length - 1); i++) 
{ 
    clubs[i]  = new JLabel("Club " + i); 
    editAClub[i] = new JButton("Edit"); 

    //add the pair to the map 
    labelMap.put(editAClub[i],clubs[i]); 

    editAClub[i].addActionListener(new ActionListener() 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      //get the label associated with this button from the map 
      selectedClub = labelMap.get(e.getSource()).getText(); // the toString() is redundant 
      System.out.println(selectedClub); 
     } 
    }); 
} 

Таким образом, кнопка и ярлыки связаны друг с другом через отдельную структуру данных а не только по их показателям в их соответствующих массивах.

+0

Valek, который выбрасывает NullPointerException ... Мне также пришлось сделать finalMap final. В любом случае, хотя это не сработает. –

+0

Проблема решена, я использовал идею Валека ... Однако вместо этого использовать «это» я использовал e.getSource(). –

+0

@ RickyRodrigues Исправлено. Извините, меня путают разные уровни 'this' в анонимных объявлениях классов. не стесняйтесь принимать, если он решил вашу проблему. – ApproachingDarknessFish