Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° JavaΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 61

Автор Н.А. Вязовик

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² особСнности событий, рассмотрим, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ события – ActionEvent.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ ActionEvent

Рассмотрим появлСниС события ActionEvent Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ создаСтся ΠΊΠ½ΠΎΠΏΠΊΠ° сохранСния Ρ„Π°ΠΉΠ»Π°:


Button save = new Button("Save");

add(save);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΊΠ½ΠΎ прилоТСния с этой ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ появится Π½Π° экранС, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт Π½Π°ΠΆΠ°Ρ‚ΡŒ Π΅Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ AWT сгСнСрируСт ActionEvent. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ. НазваниС Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ интСрфСйса прямо слСдуСт ΠΈΠ· названия события – ActionListener. Π’ Π½Π΅ΠΌ всСго ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ (Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡΡ… ΠΈΡ… нСсколько), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ – ActionEvent.

Объявим класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ этот интСрфСйс:


class SaveButtonListener

implements ActionListener {

private Frame parent;

public SaveButtonListener(Frame parentFrame)

{

parent = parentFrame;

}

public void actionPerformed(ActionEvent e)

{

FileDialog fd = new FileDialog(parent,

"Save file", FileDialog.SAVE);

fd.setVisible(true);

System.out.println(fd.getDirectory()+"/"+

fd.getFile());

}

}

}

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ класса Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ссылку Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ„Ρ€Π΅ΠΉΠΌ, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ удастся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ FileDialog. Π’ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ actionPerformed класса ActionListener ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ. А ΠΈΠΌΠ΅Π½Π½ΠΎ, открываСтся Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ опрСдСляСтся ΠΏΡƒΡ‚ΡŒ сохранСния Ρ„Π°ΠΉΠ»Π°. Для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° достаточно вывСсти этот ΠΏΡƒΡ‚ΡŒ Π½Π° консоль.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг – рСгистрация ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ. НазваниС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° снова прямо слСдуСт ΠΈΠ· названия интСрфСйса – addActionListener.


save.addActionListener(

new SaveButtonListener(frame));


ВсС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ наТатия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ сдСлано. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ»Π½Ρ‹ΠΉ листинг ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:


import java.awt.;

import java.awt.event.*;

public class Test {

public static void main(String args[]) {

Frame frame = new Frame("Test Action");

frame.setSize(400, 300);

Panel p = new Panel();

frame.add(p);

Button save = new Button("Save");

save.addActionListener(

new SaveButtonListener(frame));

p.add(save);

frame.setVisible(true);

}

}

class SaveButtonListener

implements ActionListener {

private Frame parent;

public SaveButtonListener(Frame parentFrame)

{

parent = parentFrame;

}

public void actionPerformed(ActionEvent e)

{

FileDialog fd = new FileDialog(parent,

"Save file", FileDialog.SAVE);

fd.setVisible(true);

System.out.println(fd.getDirectory()+

fd.getFile());

}

}


ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ появится Ρ„Ρ€Π΅ΠΉΠΌ с ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ "Save". Если Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° Π½Π΅Π΅, откроСтся Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³. ПослС Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° Π½Π° консоли отобраТаСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ.

Бобытия AWT

Π˜Ρ‚Π°ΠΊ, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ события AWT ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ класс XXEvent, интСрфСйс XXListener, Π° Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅-источникС событий – ΠΌΠ΅Ρ‚ΠΎΠ΄ для рСгистрации ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ addXXListener.

БовсСм Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄Π½ΠΎ событиС ΠΌΠΎΠ³Π»ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ лишь ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. НапримСр, рассмотрСнный ActionEvent гСнСрируСтся послС наТатия Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ ( Button ), послС наТатия клавиши Enter Π² ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° тСкста ( TextField ), ΠΏΡ€ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌ Ρ‰Π΅Π»Ρ‡ΠΊΠ΅ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ элСмСнту списка ( List ) ΠΈ Ρ‚.Π΄. Π£Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ события Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² addXXListener.

МногиС ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΠΈ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ActionListener, ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²ΠΈΠ΄ΠΎΠ² событий. НапримСр, MouseMotionListener Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ Π·Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – mouseMoved (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅) ΠΈ mouseDragged (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ). Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ лишь с ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ приходится ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΈ ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ пустыми. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этой бСсполСзной Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ java.awt.event ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы-Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, MouseMotionAdapter (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ прямо слСдуСт ΠΈΠ· названия ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ). Π­Ρ‚ΠΈ классы Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Object ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс. АдаптСр – абстрактный класс, Π½ΠΎ абстрактных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Π½Π΅ΠΌ Π½Π΅Ρ‚, ΠΎΠ½ΠΈ всС ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ пустыми. ΠžΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ для прилоТСния.

ΠšΠ»Π°ΡΡΡ‹ сообщСний ( event ) содСрТат Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ события. ΠœΠ΅Ρ‚ΠΎΠ΄ getSource() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-источник события. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ наслСдники AWTEvent ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. НапримСр, MouseEvent сообщаСт ΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ, Π° Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getX ΠΈ getY Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π³Π΄Π΅ это событиС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

Наряду с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ addXXListener Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ ΠΈΠ³Ρ€Π°Π΅Ρ‚ removeXXListener. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Java Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· памяти автоматичСским сборщиком мусора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подсчитываСт ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Π°ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ ссылок Π½Π° Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Если ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΡƒΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» свою Ρ€ΠΎΠ»ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½, Ρ‚ΠΎ явно Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ ссылок Π½Π° Π½Π΅Π³ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² своСм спискС ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Ρ‚ΡŒ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ garbage collector, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ removeXXListener.

Рассмотрим ΠΎΠ±Π·ΠΎΡ€Π½ΠΎ всС события AWT ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠΌ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Java начиная с вСрсии 1.1.

MouseMotionListener ΠΈ MouseEvent

Π­Ρ‚ΠΎ событиС Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Оно ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ курсора ΠΌΡ‹ΡˆΠΈ. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – mouseMoved для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ пСрСмСщСния ΠΈ mouseDragged для пСрСмСщСния с Π½Π°ΠΆΠ°Ρ‚ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ этот ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ с событиСм MouseMotionEvent (Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса Π½Π΅Ρ‚), Π° с MouseEvent, ΠΊΠ°ΠΊ ΠΈ MouseListener.

MouseListener ΠΈ MouseEvent

Π­Ρ‚ΠΎΡ‚ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ mouseEntered ΠΈ mouseExited. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ вызываСтся, ΠΊΠΎΠ³Π΄Π° курсор ΠΌΡ‹ΡˆΠΈ появляСтся Π½Π°Π΄ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ – ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†.

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΌΡ‹ΡˆΠΈ слуТат Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: mousePressed, mouseReleased ΠΈ mouseClicked. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠ°Π», Π° Π·Π°Ρ‚Π΅ΠΌ отпустил ΠΊΠ½ΠΎΠΏΠΊΡƒ, Ρ‚ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ всС Ρ‚Ρ€ΠΈ события Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ порядкС. Если Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠ² Π±Ρ‹Π»ΠΎ нСсколько, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ getClickCount класса MouseEvent Π²Π΅Ρ€Π½Π΅Ρ‚ количСство. Как ΡƒΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΎΡΡŒ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ getX ΠΈ getY Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π³Π΄Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ событиС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, какая ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΌΡ‹ΡˆΠΈ Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π°, Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getModifiers ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с константами:


(event.getModifiers() &

MouseEvent.BUTTON1_MASK)!=0


Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, пСрвая ΠΊΠ½ΠΎΠΏΠΊΠ° соотвСтствуСт Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΌΡ‹ΡˆΠΈ.

KeyListener ΠΈ KeyEvent

Π­Ρ‚ΠΎΡ‚ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ отслСТиваСт Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ клавиш ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: keyTyped, keyPressed, keyReleased. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Π²ΠΎΠ΄ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Unicode -символа с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. ΠœΠ΅Ρ‚ΠΎΠ΄ keyPressed сигнализируСт ΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ, Π° keyReleased – ΠΎΠ± отпускании Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ клавиши. Π’Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ этими событиями ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ. НапримСр, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Shift ΠΈ Π² это врСмя Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ "A", ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ событиС Ρ‚ΠΈΠΏΠ° keyTyped ΠΈ нСсколько keyPressed/Released. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΌΠ΅Ρ‚ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ±Π΅Π», Ρ‚ΠΎ послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ keyPressed Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ keyTyped, Π° послС отпускания – keyReleased.

Π’ классС KeyEvent ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ мноТСство констант, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, какая клавиша Π±Ρ‹Π»Π° Π½Π°ΠΆΠ°Ρ‚Π° ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ состоянии Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ слуТСбныС клавиши ( Ctrl, Alt, Shift ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅).

FocusListener ΠΈ FocusEvent

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ фокусом ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ события ΠΎΡ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Ѐокус ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² ΠΌΡ‹ΡˆΠΊΠΎΠΉ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ, Π»ΠΈΠ±ΠΎ Π½Π°ΠΆΠ°Π² ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Tab.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ FocusListener содСрТит Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° – focusGained ΠΈ focusLost (ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½/потСрян).

TextListener ΠΈ TextEvent

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹-наслСдники TextComponent ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° Π²Π²ΠΎΠ΄ тСкста ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ TextEvent. Π‘Π»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ textValueChanged. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ тСкста, Ρ‡Ρ‚ΠΎΠ±Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ подсказку, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… символах.

ItemListener ΠΈ ItemEvent

Π­Ρ‚ΠΎ событиС ΠΌΠΎΠ³ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ классы, ΠΊΠ°ΠΊ Checkbox, Choice, List. Π‘Π»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ itemStateChanged, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сигнализируСт ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояния элСмСнтов.

AdjustmentListener ΠΈ AdjustmentEvent

Π­Ρ‚ΠΎ событиС гСнСрируСтся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ScrollBar. Π‘Π»ΡƒΡˆΠ°Ρ‚Π΅Π»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ adjustmentValueChanged, ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояния полосы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ.

WindowListener ΠΈ WindowEvent

Π­Ρ‚ΠΎ событиС сигнализируСт ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ состояния ΠΎΠΊΠ½Π° (класс Window ΠΈ Π΅Π³ΠΎ наслСдники).

Рассмотрим особо ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ – windowClosing. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ вызываСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, наТимая Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π°. ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ€Π°Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ Π² Java ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈ этом Π½Π΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ AWT лишь посылаСт WindowEvent Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Ρ‚Π°ΠΊΠΎΠ΅ дСйствиС, Π° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΎΠΊΠ½Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ программист:


public class WindowClosingAdapter

extends WindowAdapter {

public void windowClosing(WindowEvent e)

{

((Window)e.getSource()).dispose();

}

}


ΠžΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ windowClosing ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ссылку Π½Π° ΠΎΠΊΠ½ΠΎ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ событиС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ пользовались ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ setVisible(false), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Window автоматичСски ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ dispose, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ освобоТдаСт всС систСмныС рСсурсы, связанныС с этим ΠΎΠΊΠ½ΠΎΠΌ.

Когда ΠΎΠΊΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ, Ρƒ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ вызываСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ – windowClosed.