VR
Virtual Reality On-line   Java
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Порграммирование в Java
События
:
Logo

Сегодня мы научимся отвечать на события от компонентов. Я думаю, что это будет последнее занятие, на котором мы работаем с чистым Java. В следующей статье мы перейдём в среду разработки JBuilder от фирмы Borland. Да, именно Borland. Inprise снова вернулась к своему старому названию. А самое главное для нас – бесплатная и полноценная версия JBuilder от этой фирмы.

А сейчас я всё же вернусь к нашим кабанчикам. Все примеры, которые я писал были абсолютно бесполезны. Зачем нужна кнопка, если мы не можем поймать её событие? Просто чтобы понажимать? Я думаю нет. Если ты давишь на пимпу, то что-то должно происходить, иначе всё это полный бардак.

Существует две модели обработки событий. Первая была принята в Java 1.0, а вторая в Java 1.1. Они отличаются друг от друга, как муха от слона. Мы с тобой будем изучать более новую модель из Java 1.1. Тебе нужно только помнить: всё что я говорю, может не работать в версии 1.0. В принципе, тебя это не должно сильно волновать, потому что 1.0 устарела уже давно и нигде не сохранилась. Несмотря на это, старую модель можно использовать в Java 1.1 и некоторые так и делают. Но я считаю, что это извращение, потому что использовать обе модели сразу в одном проекте нельзя. А отказываться от новых возможностей ради старых древесин я не собираюсь.
Анекдот:

Сообщение в амеpиканской пpессе:

"Вчеpа веpховным судом США был осужден на десять лет известный хакеp Destroer за незаконное втоpжение в финансовые компьютеpные сети. Отбывать заключение осужденный напpавлен в тюpьму штата Аляска. Банковские воpотилы могут спать спокойно."

Сообщение в амеpиканской пpессе на следующий день:

"Согласно данным главного компьютеpа сети испpавительных учpеждений штата Аляска бывший хакеp Destroer полностью отбыл 10-летний сpок заключения и тепеpь с чистой совестью выходит на свободу"

Подробнее

Обработка событий в Java 1.1 – это обработка событий. При создании компонента, ты говоришь ему, какую функцию надо вызывать при определённом событии. Чтобы добиться этого, нужно создать отдельный класс, который и будет реализовывать ответ. А компоненту можно передать экземпляр этого класса.

Кстати, тебе неверно непонятно, что такое экземпляр класса? Когда ты инициализируешь класс (объект), то ты присваиваешь переменной класс (объект). После этого переменная становится указателем на новый класс, а точнее сказать одним из его экземпляров. Новая модель событий работает в библиотеках AWT и JavaBeans API.

Для каждого типа событий есть свои классы. Каждое событие является подклассом класса java.util.EventObject. Для каждого события существует порождающий его объект, который можно получить с помощью метода getSource(), и каждому событию пакета AWT соответствует определенный идентификатор, который позволяет получить метод getid().Полученное значение используется для того, чтобы отличать события различных типов, которые могут описываться одним и тем же классом.

Обработка по событию происходит с помощью «слушателей». «Слушателем» является объект, который ожидает появления определённого события. Когда источник порождает событие ), он оповещает все объекты «слушателей» о том, что данное событие произошло. В таблицу 1 я засандолил определенные в пакете java.awt.event типы событий, соответствующие им слушатели, а также методы, определенные в каждом интерфейсе слушателя

Таблица 1. Типы событий, слушатели и методы слушателей

Класс события

Интерфейс слушателя

Методы слушателя

ActionEvent

ActionListener

actionPerformed()

AdjustmentEvent

AdjustmentListener

adjustmentValueChanged()

ComponentEvent

ComponentListener

componentHidden()
componentMoved()
componentResized()
componentShown()

ContainerEvent

ContainerListener

componentAdded() componentRemoved()

FocusEvent

FocusListener

focusGained()

focusLost ()

ItemEvent

ItemListener

itemStateChanged()

KeyEvent

KeyListener

keyPressed()

keyReleased()

keyTyped()

MouseEvent

MouseListener

mouseClicked() mouseEntered() mouseExited() mousePressed()
mouseReleased()

MouseMotionListener

mouseDragged()

mouseMoved()

TextEvent

TextListener

textValueChanged()

WindowEvent

WindowListener

windowActivated() windowClosed() windowClosing() windowDeactivated() windowDeiconified() windowlconified() windowOpened()

В таблице 2 я привел список элементов пакета AWT и событий, которые они порождают:

Элемент

Порождаемое событие

Значение

Button

ActionEvent

Пользователь нажал кнопку

CheckBox

ItemEvent

Пользователь установил или сбросил флажок

CheckBoxMenuItem

ItemEvent

Пользователь установил или сбросил флажок рядом с пунктом меню

Choice

ItemEvent

Пользователь выбрал элемент списка или отменил его выбор

Component

ComponentEvent

Элемент либо перемещен, либо он стал скрытым,либо видимым

FocusEvent

Элемент получил или потерял фокус ввода

KeyEvent

Пользователь нажал или отпустил клавишу

MouseEvent

Пользователь нажал или отпустил кнопку мыши, либо курсор мыши вошел или покинул область, занимаемую элементом, либо пользователь просто переместил мышь или переместил мышь при нажатой кнопке мыши

Container

ContainerEvent

Элемент добавлен в контейнер или удален из него

List

ActionEvent

Пользователь выполнил двойной щелчок мыши на элементе списка

ItemEvent

Пользователь выбрал элемент списка или отменил выбор

MenuItem

ActionEvent

Пользователь выбрал пункт меню

Scrollbar

AdjustmentEvent

Пользователь осуществил прокрутку

TextComponent

TextEvent

Пользователь внес изменения в текст элемента

TextField

ActionEvent

Пользователь закончил редактирование текста элемента

Window

WindowEvent

Окно было открыто, закрыто, представлено в виде пиктограммы, восстановлено или требует восстановления

Ну а теперь сам пример, который мы сегодня разберём:

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class myliner extends Applet {
int last_x, last_y;
public void init() {
// Здесь мы создаём и регистрируем MouseListener.
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
last_x = e.getX(); last_y = e.getY();
}
});
// Создам и регистрируем  MouseMotionListener.
this.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
Graphics g = getGraphics();
int x = e.getX(), y= e.getY();
g.setColor(Color.black);
g.drawLine(last_x, last_y, x, y);
last_x = x; last_y = y;
}
});
// Создаём кнопку Clear.
Button b = new Button("Очистить");
// Создаём слушателя на нажатие кнопки
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Очищаем рисунок
Graphics g = getGraphics();
g.setColor(getBackground());
g.fillRect(0, 0, getSize().width, getSize().height);
}
});
this.add(b);
} }

После компиляции у тебя получится 4-е выходных файла, и все они нужны:

  • Mliner.class
  • Mliner$1.class
  • Mliner$2.class
  • Mliner$3.class

А вот и результат:

Попробуй порисовать внутри окна. Вот и всё.

 Исходники примера забирай здесь


Copyright©: Horrific aka Флёнов Михаил
Design by FMk group©