Обработка событий - Java (251628)

Узнай цену своей работы

Формулировка задачи:

Добрый день. В ходе знакомства с java я добрался до обработки событий. Подскажите, пожалуйста, как правильно писать класс-обработчик события: отдельным классом или вложенным? Мой первый опыт написания обработчика неудачен - в классе-обработчике я не могу обратиться к объектам из главного класса. Они попросту не видны. Подскажите, пожалуйста, что я неправильно делаю. Код прилагается. Буду благодарен за любые прочие замечания по написанию приложений с графическим интерфейсом.
public class Alphabet extends JFrame {
 
    public Alphabet(String s) {
        super(s);
        EventMaker em = new EventMaker();
 
        GridLayout manager = new GridLayout();
        manager.setRows(8);
        manager.setColumns(4);
 
        JPanel p1 = new JPanel();
        p1.setBackground(Color.LIGHT_GRAY);
        p1.setLayout(manager);
        add(p1);
 
        StringTokenizer rusAl = new StringTokenizer("А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ь Э Ю Я");
        while (rusAl.hasMoreTokens()){
            JButton button = new JButton(rusAl.nextToken());
            button.setBounds(10, 10, 30, 30);
            button.setBackground(Color.ORANGE);
            button.addActionListener(em);
            p1.add(button);
        }
        setSize(500, 500);
        setVisible(true);
    }
 
    public static void main(String[] args){
        JFrame f = new Alphabet("Знай азбуку");
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    public class EventMaker implements ActionListener {
 
        @Override
        public void actionPerformed(ActionEvent e) {
            String str = e.getActionCommand();
            switch (str){
                case "А":
                    //Сменить, например, цвет кнопки на зелёный
                    setBackground(Color.BLUE);
                    break;
                case "Б":
                    setBackground(Color.RED);
                    break;
                case "В":
                    break;
                default:
 
            }
 
        }
    }
}

Решение задачи: «Обработка событий»

textual
Листинг программы
public class EventMaker implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String str = e.getActionCommand();
            JButton b = (JButton) e.getSource();
 
            switch (str){
                case "А":
                    //Сменить, например, цвет кнопки на зелёный
                    b.setBackground(Color.BLUE);
                    break;
                case "Б":
                    b.setBackground(Color.RED);
                    break;
                case "В":
                    break;
                default:
 
            }
 
        }
    }

Оцени полезность:

15   голосов , оценка 3.867 из 5