Обработка событий SwingEvents

advertisement
Интернет-технологии
Основы JAVA
Модуль : Обработка событий
Обработка событий
Источник генерирует событие и посылает его слушателю (listener).
java.awt.event
Источник события: должен регистрировать слушателей
event source
public void addTypeListener(TypeListener el);
Туре - имя события, а еl - ссылка на слушателя события.
Обработчик (приемник ) события: во-первых, должен быть зарегистрирован
event listener
источником событий во-вторых, он должен реализовать
методы для получения и обработки таких уведомлений.
Классы событий
EventObject – суперкласс
ActionEvent – генерируется по нажатию кнопки, двойному щелчку на элементе
списка либо при выборе пункта меню
MouseEvent – генерируется при перетаскивании, перемещении, щелчках,
нажатии и отпускании кнопок мыши
KeyEvent – генерируется при клавиатурном вводе
и др.
Обработка событий
Обработчик событий - объект, оповещаемый о возникновении события.
Требования:
• Во-первых, чтобы получать оповещения о конкретном типе событий, он
должен быть зарегистрирован в источнике
• Во-вторых, он должен реализовывать метод, предназначенный для
обработки события
Интерфейсы
Методы, позволяющие обрабатывать события, определены в интерфейсах.
В интерфейсе ActionListener объявлен метод
actionPerformed () ,
вызываемый при возникновении события, когда пользователь щелкает на
кнопке или выполняет действие, затрагивающее компонент.
ActionEvent – ActionListener
MouseEvent – MouseListener, MouseMotionListener
KeyEvent – KeyListener
Обработка событий действий
void actionPerformed(ActionEvent e) - вызывается при возникновении события;
где е - конкретное событие.
Объект ActionEvent, передаваемый методу actionPerformed () , предоставляет
доступ к информации о событии.
Идентифицировать компонент, сгeнерировший событие можно двумя
способами:
• по строке, представляющей команду действия
• посредством ссылки на объект
String getActionCommand() – возвращает строку команды действия для
компонента, сгенерировавшего событие
(Например, по щелчку на кнопке генерируется событие действия, для котоpoгo строка команды
совпадает с текстом, отображаемым на этой кнопке. )
Object getSource() - определяет компонент, получая ссылку на него.
Преимущество использования getSource() состоит в том, что если потребуется
выполнять действия непосредственно с компонентом, то можно сделать это с
помощью ссылки Object.
Пример обработки событий
Расположение компонентов
JPanel contentPanel = new JPanel(new GridLayout(2, 0));
JPanel textPanel = new JPanel(new FlowLayout());
JPanel buttonPanel = new JPanel(new FlowLayout());
JLabel jlbl = new JLabel(" Events ");
textPanel.add(jlbl);
//JTextField jtxt; Объявлен выше в class firstSw
jtxt = new JTextField("not events", 15);
textPanel.add(jtxt);
//JButton btnOk, btnQ; Объявлены выше в class firstSw
btnOk = new JButton("Go Event");
btnQ = new JButton("Quit");
buttonPanel.add(btnOk);
buttonPanel.add(btnQ);
contentPanel.add(textPanel);
contentPanel.add(buttonPanel);
Пример обработки событий
import java.awt.event.*; /*……………др. включения import…..*/
public class firstSw implements ActionListener{
JButton btnOk, btnQ;
JTextField jtxt;
public firstSw() {
/* ……Расположение компонентов GridLayout , FlowLayout и др. …………*/
btnOk.addActionListener(this); // источник регистрирует слушателей
btnQ.addActionListener(this); // источник регистрирует слушателе
//……………………………….
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(btnOk)) {
/*Object getSource () - возвращает ссылку на компонент,
boolean equals(Object str) - сравнивает символы внутри объекта String. */
jtxt.setText("Event \"OK\"");
}
if (e.getSource().equals(btnQ)) {
jtxt.setText("Event \"Quit\"");
}
}
public static void main(String[] args) {//……………………………}
}
Пример обработки событий
Альтернативные подходы к обработки событий
Обработчики посредством неименованных внутренних классов.
Например, обработчик для кнопки может иметь следующий вид:
public class firstSw implements ActionListener {
//………………………………….
JButton jbtn = new JButton (“OK”);
//…………………………………..
jbnt.addActionListener(new ActionListener() {
public void actionPerformed (ActionEvent е) {
// Действия по обработке события.
}
});
}
Здесь применяется неименованный внутренний класс, реализующий
интерфейс ActionListener.
Задание :
Разработать программу калькулятор
JButton[] BtnNumber = new JButton[10];
//………………………….
// Layout для кнопок с цифрами
for (int i = 0; i < BtnNumber.length; i++)
{
BtnNumber[i] = new Jbutton ("(" +i")");
BtnNumber[i].setActionCommand (""+i);
BtnNumber[i].addActionListener(this);
buttonPanel.add(BtnNumber[i]);
}
//…………………………..
public void actionPerformed(ActionEvent e) {
/* метод getActionCommand () возвращает в виде строки string, которая
установлена методом setActionCommand (String s) */
String strBtn = e.getActionCommand();
//getSource() возвращает ссылку на компонент
if (e.getSource().equals(btnOk)) {
int secondNum = Integer.valueOf(txtEdit.getText()); // String  Integer
//……………………………….
}
Download