Предполагая, что это весь код, который имеет какое-либо отношение к вашему ActionListener
, вот ваш ответ:
Вы отдаете все свои RadioButtons
и ActionListener
.Который, конечно, будет вызван, когда нажмете РАДИО КНОПКИ .Однако в этих случаях источником события будет никогда , а не другая кнопка с именем select
.
Вы, кажется, хотите позвонить своему ActionListener
, когда кнопка select
нажата.Это означает, что для кнопки нужен ActionListener
, а не ваша RadioButtons
.
. Примечание:
this.jRdBttn = new JRadioButton(u.getProject(i).getName());
Это будет означать, что this.jRdBttn
будет содержать толькосамый последний RadioButton
, который вы создали в конце этого цикла.Все остальные будут потеряны навсегда, так как у вас больше нет прямых ссылок на них (конечно, у вас все еще есть их в иерархии компонентов, но когда-нибудь использовать их таким способом будет болезненно).
-- Изменить 29.05.2018 ---
Если вы хотите реагировать каждый раз, когда нажимается радиокнопка (что, я думаю, вы подразумеваете под своим комментарием), без необходимости в кнопке выбора, будетнесколько способов добиться этого.
Какой способ использования вы в значительной степени используете, зависит от вашего варианта использования.
Если мы попытаемся максимально приблизиться к вашему текущему подходу, нам может потребоваться сохранитьвсе ваши RadioButtons в массиве, а затем перебрать этот массив, чтобы найти выбранную в данный момент кнопку.Вам даже не нужно было бы смотреть на ActionEvent или его источник, так как на самом деле вам все равно, какая кнопка RadioButton была нажата, а какая только выбрана в данный момент.
Конечно, вы можете утверждать, что кнопкаэто было просто нажатие - это тот, который был выбран, но с вашим текущим подходом вам все равно придется перебирать массив, чтобы найти индекс (который, как я полагаю, вам может понадобиться для доступа к соответствующему проекту), что делает его бессмысленным.
Итак, первый шаг: добавьте в свой класс:
private JRadioButton[] radioButtons;
Далее:
public JPanel setupButtons(User u){
JPanel forButtons = new JPanel();
ButtonGroup group = new ButtonGroup();
radioButtons = new JRadioButton[u.projectSize()]; // <- This is new
for(int i = 0; i != u.projectSize(); i++){
radioButtons[i] = new JRadioButton(u.getProject(i).getName());
forButtons.add(radioButtons[i]);
group.add(radioButtons[i]);
radioButtons[i].addActionListener(this);
radioButtons[i].setEnabled(true);
}
}
И последнее, но не менее важное:
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < radioButtons.length; i++) {
if (radioButtons[i].isSelected()) {
System.out.println("Button " + i + " was selected!");
// Optionally, you might want to put a break; here
}
}
}