Как получить имя 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);
    }
}
→ Ссылка