Главная » Java » События окна

0

Во время работы  программы  могут происходить различные события:    пользователь  нажмет  на  кнопку,  веб-­?браузер  решит перерисовать окно, и так далее. Я уверен, что вы пытались нажимать на кнопки вашего калькулятора из  главы  5, но эти кнопки еще не были готовы реагировать на ваши действия.

Каждый  компонент окна может обрабатывать различные события, или, как  мы  говорим,  слушать  эти  события.  Вы  можете зарегистрировать классы  Java, которые называют слушателями (listeners),  привязав их к компонентам  окна. Вы  должны  сделать так, чтобы  компоненты слушали только те события, которые им нужны.

Например,  когда  человек  перемещает  указатель  мышки  над  кнопкой калькулятора,  неважно   где   именно   был   этот   указатель,   когда пользователь   нажал   на   кнопку,   пока   курсор   находился   над поверхностью  кнопки.  Поэтому  вам  не  нужно регистрировать слушатель  MouseMotionListener  для  кнопки.  С  другой  стороны,  этот слушатель полезен для всевозможных программ для рисования.

Для  кнопок калькулятора нужно зарегистрировать класс ActionListener, который  умеет обрабатывать нажатия на кнопки. Все  эти слушатели  – это    специальные   конструкции   Java,   которые   называются интерфейсами.

ИнтерфейсыБольшинство  классов  определяют  методы,  которые  реагируют  на различные  действия, например,  отвечу на нажатие кнопки,  отвечу на движение  мыши, и так  далее.   Набор таких действий называется поведением класса.

Интерфейсы  –  это  специальные  конструкции,  которые  только объявляют   набор   определенных   действий   без   кода,   который описывает, что именно надо делать в объявленных методах, например:

interface MouseMotionListener {

void mouseDragged(MouseEvent e);

void mouseMoved(MouseEvent e);

}

Как  видите,  методы  mouseDragged()  и mouseMoved()  не содержат никакого  текста  программ  –  эти  методы  просто  объявлены  в интерфейсе, называемом  MouseMotionListener.  А вот  если  ваш  класс должен   реагировать  на  движение  указателя  мыши  или  на перетаскивание  мышью,  то  тогда  он  должен  реализовать  этот интерфейс.

Слово  implements  означает,  что  этот  класс  совершенно  точно  будет содержать  методы,  которые  могли  быть  объявлены в  интерфейсе, например:

import java.awt.event.MouseMotionListener;

class MyDrawingPad implements MouseMotionListener{

// здесь может идти  текст программы, которая

//  выполняет функции графического редактора

mouseDragged(MouseEvent e){

// здесь будет текст программы, когда

// мышь что-то перетаскивает

}

mouseMoved(MouseEvent e){

// сюда идет текст программы, когда

// мышь просто будет здесь двигается

}

}

Должно  быть,  вам  интересно,  зачем  беспокоиться  о  создании интерфейсов  без  текста  программы? Причина  в  том,  что  интерфейс, сделанный   однажды,    может использоваться во многих классах. Например,  когда  другие  классы  (или  сама  виртуальная  машина  JVM) видят,    что   класс   MyDrawingPad      реализует   интерфейс MouseMotionListener,  они  знают,  что  в  этом  классе  точно  есть методы mouseDragged() и mouseMoved().

Каждый  раз, когда пользователь двигает мышкой, JVM вызывает метод mouseMoved()   и исполняет текст программы, который вы  там написали.   Представьте,  что  если  Иван  решит  назвать  этот  метод mouseMoved(),  Маша  назовет  его  movedMouse(),  а  Петя предпочтет mouseCrawling()?  Тогда JVM  запутается  и  не  будет  знать,  какой  же метод вашего класса вызвать, чтобы сообщить о движении мыши.

Класс Java  может  реализовывать  много  интерфейсов,  например,  онможет  реагировать на движения мыши и на нажатие кнопки:

class myDrawingProgram implements MouseMotionListener, ActionListener {

// Здесь вы должны написать текст программы для

// каждого метода обьявленного в обoих интерфейсax

}

После того, как  вы  освоитесь с интерфейсами, которые  предоставляет вам  Java, вы  сможете создавать свои

Источник: Java  Programming for Kids, Parents and Grandparents by Yakov Fain

По теме:

  • Комментарии