WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Как перехватить события поступающие с клавиатуры ?

Как перехватить события поступающие с клавиатуры ?


Дата публикации: 17-03-2013

Предложение от Mike M.

Обработка событий поступающих с клавиатуры довольно простая задача для апплета.

public void keyDown(Event e, int key)
является стандартным методом подпрограммы. Параметр "key" принимает значение ASCII, нажатой клавиши.
keyDown
остается неактивным, пока клавиша не нажата.
Предложение от Nelson Yu.

Для обработки событий поступающих с клавиатуры можно поступить так:

public boolean handleEvent(Event evt)
{
switch(evt.id)
{
// We return false because we want Java to continue handling
// the events
case Event.KEY_ACTION:
{
System.out.println("Keyboard event");
return false;
}
case Event.KEY_PRESS:
{
System.out.println("Key was pressed"):
return false;
}
default:
return false;

}
Элемент формирует ключевые события в методах keyDown() and keyUp();

2. Как можно определить событие и ответить на него?

Предложени от Vivek Pabby

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

import java.io.*;
import java.net.*;
import java.awt.*;
import java.applet.*;

public class simple_gui extends Applet
{

// Следующий код создаст новое определяемое пользователем событие.
// Это событие определяется параметром "newEvent".
// При попытке обработать это событие, апплет должен искать
// параметр события "NewEvent".

public Event evt1 = new Event(this, Event.ACTION_EVENT,"newEvent");




// Следующее перенесет определяемое пользователем событие evt1 в апплет

postEvent(evt1);

// событие hadler должно проверить для апплета определяемое пользователем
// событие и произвести любые необходимые действия.

public boolean action(Event evt, Object arg)
{

if ("newEvent".equals(arg))
{
// set any variables....do anthing that is required for the
//user defined event
}

}

3. Как используется метод deliverEvent()? Чем он отличается от postEvent()?

Предложение от Vivek Pabby

Вот лучший способ из тех что я знаю:

метод deliverEvent (),кодга элемент вызван на выполнение немедленно. Это отменяет нормальные события очереди для GUI элементов.

В нормальном случае обработки механизма GUI событий происходит так: события сначала "регистрируются" в очереди и обрабатываются в порядке поступления. Метод deliveEvent() создает элемент обработки событий вне нормальной последовательности.

Метод postEvent() переносит указанные события в элементы событий очереди и это cобытие будет обработанно после других событий в очереди.


4. Как составляющие элементы уведомляют "контейнер" о обработке случайного события, нажатия кнопки?

Предложение от Vivek Pabby

Для элемента имеется два пути, позволяющие узнать "контейнеру" что обработало событие reveived.

1. Событие, обрабатывающий функции в составляющем классе (подобно действию (...), handleEvent (...)) возвращает булево значение. Если значение, возвращенное от функции истинно, рассматриваемое событие будет обработано и принято от " событий очереди " элемента.

2. Вы могли использовать смесь управляемых переменных и т.д, чтобы сохранить путь, если событие было обработано элементом или нет. ЭТО НЕ ЛУЧШЕЕ РЕШЕНИЕ.

Я рекомендовал бы использовать первый подход. Код приведенный ниже, если его откомпилировать и выполнить, выведет три кнопки, которые иллюстрируют процедуру обработки событий.

Первая кнопка - пример созданния простой кнопки, c использованием класса "Button" (Кнопка). Простой класс "Button" (Кнопка), обеспеченный java, передаст событие нажатия "контейнеру". Вы можете проверять это, нажимая на кнопку.

Вторая кнопка создана, с использованием расширенногок класса "Button" (Кнопка). Обрабатывает событие и НЕ "помечает" событие как обработанное. ( возвращает ложь от действия (...) метод) "Контейнер" обрабатывает события снова, потому что это событие не было принято в очереди событий.

Третья кнопка создана,с использованием другова расширенного класса "Button" (Кнопка). Обрабатываетcя событие и "помечаетcя" как обработанное. ( возвращает истину от действия (...) метод) Так что контейнер не обрабатывает cобытие снова, потому что это событие было принято в очереди событий.

import java.awt.*;
import java.applet.*;

class buttonOne extends Button
{
TextArea ta1 = null;

public buttonOne(String s, TextArea ta) {
super(s);
ta1 = ta;
}
public boolean action(Event e, Object o) {
ta1.appendText("\n" + "Event handled by COMPONENT - Button 2" + "\n");
return false;
}
}

class buttonTwo extends Button
{
TextArea ta1 = null;

public buttonTwo(String s, TextArea ta) {
super(s);
ta1 = ta;
}
public boolean action(Event e, Object o) {
ta1.appendText("\n" + "Event handled by COMPONENT - Button 3" + "\n");
return true;
}
}

public class easyButtons extends Applet
{
Label l1 = null;
TextArea ta1 = null;

public void init() {
}
public easyButtons() {
setLayout(new BorderLayout());
Panel p1 = new Panel();
p1.setLayout(new FlowLayout());
add("North", p1);
ta1 = new TextArea(10, 40);
p1.add(new Button("SimpleButton"));
p1.add(new buttonOne("Button 2", ta1));
p1.add(new buttonTwo("Button 3", ta1));
p1.add(ta1);
}
public boolean action(Event e, Object o) {
ta1.appendText("Event handled by CONTAINER" + "\n");
return true;
}
public static void main(String args[]) {
Frame f1 = new Frame("Standalone Application");
easyButtons s1 = new easyButtons();
s1.init();
s1.start();
f1.add("Center", s1);
f1.resize(300, 300);
f1.show();
}
}
Вот и все!

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)
Октябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта

Хотите продать свой сайт?
- Мы быстро и удобно для Вас сможем его купить:
  • Заявка на продажу сайта
  • Раcсматриваем цены на каждый сайт в индивидуальном порядке.

    Случайная цитата

    Eric S. Raymond:

    "Обучение программированию не может научить быть экспертом, также как и изучение кистей и красок не может превратить кого-либо в художника."

    Опрос

    Какой браузер Вы используете?

    Internet Explorer
    Google Chrome
    Mozilla Firefox
    Netscape Navigator
    Maxthon Browser
    Opera
    Mozilla Suite
    SeaMonkey
    K-Meleon
    Safari
    Amaya
    Avant Browser
    SlimBrowser
    Другой...