Как получить имя JPanel в ActionEvent
Добрый день, есть следующая структура(см. скрин). JPanel cards0, cards1... используют CardLayout. Подскажите, как сделать один общий ActionListener на несколько кнопок? Как получить имя JPanel?
btn0.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
lbl0.setIcon(images.get(parseInt(e.getActionCommand())));
CardLayout c1 = (CardLayout) (**cards0**.getLayout());
c1.show(**cards0**, "Card2");
}
});
Ответы (1 шт):
Автор решения: Artem Konovalov
→ Ссылка
Не совсем уверен в том, что вы хотите сделать. Но кнопку можно достать из источника события, далее из названия кнопки достать номер. Так же можно получить ссылку на родительский элемент и на основе этой информации уже что то сделать.
НО, кнопки придется называть соответствующим образом, что бы этот код работал.
private static class CustomListener implements ActionListener {
@Override
public void actionPerformed(final ActionEvent e) {
JButton button = (JButton) e.getSource();
//button_<number>
String name = button.getName();
String number = name.substring(name.indexOf("_" + 1));
//card panel
final JPanel parent = (JPanel) button.getParent();
final CardLayout layout = (CardLayout) parent.getLayout();
layout.show(parent, "Card" + number);
}
}
