Обработка событий - 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: } } }