Программирование обработки событий от элементов, мыши и клавиатуры на Java

Для того чтобы перехватывать события от мыши, нужно подключить прослушивателъ событий. Для различных элементов используются различные прослушиватели событий. Для программных кнопок, текстовых полей и меню прослушиватели событий строятся на основе интерфейса ActionListener. Для выпадающих списков и флажков используется интерфейс ItemListener, ДЛЯ клавиатуры — KeyListener, ДЛЯ МЫШИ — MouseListener и т. д. Подключение интерфейсов реализуется сразу же в объявлении класса. Так, в объявлении класса iabi подключаем интерфейс ActionListener:

public class labl extends Frame implements ActionListener Мы добавляем прослушиватель с помощью слов implements ActionListener.

ActionListener — это абстрактный класс (интерфейс — это вид абстрактного класса, в котором методы только объявлены, но не определены. Абстрактный класс вообще — это такой класс, в

котором есть хотя бы один объявленный, но не реализованный метод). В ActionListener такой метод, подлежащий переопределению, — actionPerformed (). Его реализацию мы выполнили следующим образом:

public void actionPerformed (ActionEvent e)

{

if (e.getSource()==bl)

System.exit(0) ; else

if (e.getSource()==b2)

{

if (book == null) book=new Book("Pinoccio",200); else

System.out.println("The object already exists");

}

else

if (e.getSource()==b3)

{

if(book!=null)

{

Graphics g= getGraphics ();

g.drawString(book.title,20,200);

}

}

}

Следует понимать, что объявления абстрактных классов вполне конкретные, так что попытка пользователя сделать свое объявление строго пресекается. Например, не пройдет объявление без

public:

void actionPerformed (ActionEvent e)

{

if (e.getSource()==bl)

}

В метод actionPerformed () передается в качестве аргумента событие e, принадлежащее классу ActionEvent. Данный класс содержит метод getSource(), который дает возможность узнать, от какого источника пришло данное событие. Обратите внимание на то, как применяется метод getsource() в программе. Это его типичное использование. Запомним, что метод actionPerformed () используется для прослушивания событий от программных кнопок, меню, текстового поля (при нажатии клавиши <Enter>) и списка. Часто в программе возникает необходимость реагировать на события, связанные с нажатием клавиш на клавиатуре. Для прослушивания событий от клавиатуры следует подключить интерфейс KeyListener. В данном интерфейсе объявлены три метода:         keyPressed(), keyReleased() И

keyTyped (). Все эти три метода пользователь обязан переопределить, причем переопределение может быть пустым:

public void keyTyped(KeyEvent event)

{

}

Метод keyPressed () активизируется при нажатии на клавишу. Метод keyReleased () активизируется при отпускании клавиши. Метод keyTyped () активизируется также при нажатии на клавишу, но не позволяет получить значения клавиш-модификаторов, если таковые нажимались одновременно с клавишами. (К клавишам-модификаторам относятся клавиши <Ctrl>, <Shift>, <Alt> и др.). Для получения кода нажатой клавиши следует использовать метод getKeyCode() класса KeyEvent; для получения самой нажатой клавиши — метод getKeyChar(). Воспользуемся этими методами для выхода из программы. В разбираемом нами примере выход был реализован по нажатию на кнопку Exit (программное имя ы):

public void actionPerformed (ActionEvent e)

{

if (e.getSource()==bl)

System.exit(0) ; else

Завершение программы реализует оператор:

System.exit(0); // 0 указывается в качестве кода возврата

Теперь изменим программу следующим образом. Во-первых, в объявление класса iaM включим интерфейс KeyListener:

public class labl extends Frame implements ActionListener,KeyListener {

Book book;

Button bl=new Button("Exit");

Button b2=new Button("Create Object");

Button b3=new Button("Show Object");

Label lb=new Label("INTRODUCTION in JAVA");

TextField tf = new TextField(); public labl()

{

setLayout(null) ;

add (tf) ;

add (Ы) ;

add(b2);

add (b3) ;

add(lb);

addKeyListener(this);

Ы.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this) ; lb.setBounds(20,20,200, 20) ; tf.setBounds(20,160,200,20);

Ы.setBounds (20, 60,100,20); b2.setBounds(20,90,100,20);

b3.setBounds(20,120,100,20) ; setBackground(new Color(120,200,120));

}

public String showTitle(Book z)

{

return z.title;

}

public void keyTyped(KeyEvent ke)

U

public void keyReleased(KeyEvent ke)

U

public void keyPressed(KeyEvent ke)

{

if(ke.getKeyChar()==’a’) // выход из приложения по вводу

// символа ‘а’

System.exit(0);

}

public void actionPerformed (ActionEvent e)

{

if (e.getSource()==bl)

System.exit(0);

В конструкторе класса labl мы добавили оператор подключения прослушивателя событий от клавиатуры для объекта этого класса:

addKeyListener(this) ;

Затем объявили в теле класса labl методы для обработки событий от клавиатуры. Но чтобы ввод с клавиатуры символа ‘a’ завершил программу, нужно, чтобы окно приложения имело фокус ввода, а для этого используется оператор requestFocus(). Мы вставили его в метод main ():

public static void main(String [] args)

labl f= new 1аЫ () ;

f.setForeground( new Color(0,0,250)); f.resize(500,500); f.setVisible(true); f.requestFocus();

Так что имеем в виду, что после развертывания окна приложения оно имеет фокус ввода и среагирует на нажатие клавиши <a>. Если начать щелкать кнопками, то окно приложения потеряет фокус ввода и реагировать на нажатие клавиши <a> перестанет.

Рассмотрим более общее приложение (листинг 1.7), содержащее флажки, выпадающий список, кнопки, ярлык (Labei) и текстовое поле (TextFieid) на предмет использования прослушивателей событий.

Флажок — это элемент (маленькое квадратное окошко), в который при щелчке на нем мышью помещается символ галочки или крестика, свидетельствующий о том, что данный флажок установлен. Флажки можно объединять в группы, так что установка любого флажка из группы приводит к сбросу всех других флажков этой группы.

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

Ярлык — это текстовое поле, в котором разрешается только отображать текст, но его нельзя редактировать.

Текстовое поле — это поле, допускающее редактирование текста.

В рассматриваемом приложении важно обратить внимание на использование прослушивателей событий.

: Листинг 1.7. Пример использования прослушивателей событий

import java.awt.*; import java.awt.event.*;

//Подключение прослушивателей:

public class Compn extends Frame implements ActionListener,

Button exit=new Button("Exit");

CheckboxGroup gr= new CheckboxGroup(); // Объявление группы

// флажков

Checkbox opl= new Checkbox("One"); // Объявление первого

// флажка

Checkbox op2= new Checkbox("Two"); // Объявление второго

// флажка

Choice ch= new Choice (); // Объявление выпадающего списка Label lb= new Label("YourChoice"); // Объявление ярлыка //Объявление текстового поля:

TextField tf = new TextField("To edit ….");

Compn() // Конструктор {

setLayout(null); // Размещаем элементы вручную add(exit); // Добавляем на форму кнопку add(ch); // Добавляем выпадающий список add(lb); // Добавляем ярлык add(tf); // Добавляем текстовое поле

ch.add("Good"); // Добавляем элемент в выпадающий список ch.add("Very Good"); // Добавляем элемент в выпадающий // список

ch.add("Excellence");

opl.setCheckboxGroup(gr); // Присваиваем флажку группу op2.setCheckboxGroup(gr); // Присваиваем второму флажку

// ту же группу add(opl); // Добавляем первый флажок add(op2); // Добавляем второй флажок

opl.setBounds(10,80,100,20); // Задаем размеры и координаты

// флажка

op2.setBounds(120,80,100,20);

ch.setBounds(10,110,60,70); // Задаем размеры и координаты

// списка

lb.setBounds(130,110,100,20); // Задаемразмерыи координаты

// ярлыка

lb.setBackground(Color.white); // Устанавливаем белый фон

// ярлыка

/ / Задаем размеры и координаты текстового поля: tf.setBounds(130,140,100, 20);

// Разрешаем редактирование текста в текстовом поле: tf.setEditable(true);

tf.setBackground(Color.yellow); // Задаемфон текстового

// поля

// Добавляем прослушиватель выпадающего списка: ch.addItemListener(this);

opl.addItemListener(this); // Добавляемпрослушиватель

// флажка

op2.addItemListener(this);

// Добавляем прослушиватель текстового поля,

// который реагирует на нажатие клавиши <ENTER>: tf.addActionListener(this);

// Добавляем прослушиватель событий от ярлыка,

// который реагирует на щелчок мышью: lb.addMouseListener(this) ;

exit.addActionListener(this); // Добавляемпрослушиватель

// для кнопки // Устанавливаем координаты и размеры кнопки: exit.setBounds(10,20,100,20);

}

// Переопределяем методы интерфейса MouseListener public void mouseEntered(MouseEvent ev)

{

}

public void mouseExited(MouseEvent ev)

{

}

public void mousePressed(MouseEvent ev)

{

}

public void mouseReleased(MouseEvent ev)

{

}

public void mouseClicked(MouseEvent ev) // При щелчке мышью

// на ярлыке

// его содержимое изменяется и устанавливается из текстового // поля tf {

if(ev.getSource()==lb) lb. setText (t f. getText () ) ;

}

public void itemStateChanged(ItemEvent ie) // Реакция на

// выбор флажка

{

if(ie.getSource()==opl)

{

setBackground(Color.red) ;

} // При выборе первого флажка изменяем цвет формы // на красный else

if(ie.getSource()==op2)

{setBackground(Color.green);

} // При выборе второго флажка устанавливаем зеленый цвет // формы else

if(ie.getSource()==ch) // При выборе элемента выпадающего

// списка

// устанавливаем содержимое ярлыка равным выбранному // значению

lb.setText(ch.getSelectedItem());

}

//Обработка событий от кнопки и текстового поля public void actionPerformed(ActionEvent e)

{

if(e.getSource()==exit)

System.exit(0); //Выход из приложения else

if(e.getSource()==tf) tf.setText(""); // Сброс содержимого текстового поля // при нажатии <ENTER>

}

public static void main(String[] args)

{

Compn cm=new Compn(); cm.resize(300,300);

cm.setBackground(new Color(200,0,180)); cm. setVisible(true);

}

}

Подробные комментарии в коде программы разъясняют многие вопросы. Отметим, что содержимое ярлыка и текстового поля получаем командой getText (), а установку нового содержимого ярлыка и текстового поля осуществляем командой setText (). Значение выбранного элемента выпадающего списка получаем в строке:

ch.getSelectedItem());

Номер выделенного элемента списка возвращает метод

getSelectedIndex().

Обратим внимание также на то, что текстовое поле прослушивается с помощью интерфейса ActionListener, который распознает событие, связанное с нажатием клавиши <Enter>. Наконец, запомним следующее. Каждый прослушивателъ событий

требует определить все свои нереализованные методы. Прослушиватель MouseListener содержит пять таких методов:

□      public void mouseEntered(MouseEvent ev)

□      public void mouseExited(MouseEvent ev)

□      public void mousePressed(MouseEvent ev)

□      public void mouseReleased(MouseEvent ev)

□      public void mouseClicked(MouseEvent ev)

При реализации нужно прописывать все методы интерфейса. Более удобная возможность предоставляется абстрактным классом MouseAdapter. Поясним использование этого класса следующим примером, снабженным всеми необходимыми комментариями.

import java.awt.*; import java.awt.event.*; class Adapter extends MouseAdapter {

// Использует класс MouseAdapter mousead x;

Adapter(mousead md)

// В конструктор передаем ссылку на форму mousead {

x=md;

}

public void mousePressed(MouseEvent me)

//Описываем только метод mousePressed()

{

x.setBackground(new Color((int)(

250*Math.random()),100,100));

//при щелчке мышью на форме последняя изменяет фоновый цвет;

//x – объект класса mousead

}

}

public class mousead extends Frame

mousead() // Конструктор основного класса {

Adapter ad=new Adapter(this); // Подключение адаптера в

// основной класс this.addMouseListener(ad); // Подключение прослушивателя

// от мыши

}

public static void main(String[] args) // Главный метод приложения {

mousead nn=new mousead(); nn.resize(100,200); nn.show();

}

}

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100