Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Java / Лекции / lection6

.docx
Скачиваний:
59
Добавлен:
15.03.2015
Размер:
65.36 Кб
Скачать

Лекция 6. Обработка событий.

6.1. Архитектура событий Java.

6.2. События клавиатуры.

Для обработки событий клавиатуры предназначен интерфейс KeyListener.

public void keyTyped(KeyEvent e);

Введён текстовый символ.

public void keyPressed(KeyEvent e);

Клавиша нажата.

public void keyReleased(KeyEvent e);

Клавиша отпущена.

В качестве события используется класс KeyEvent.

Слушатель событий клавиатуры регистрируется с помощью метода public void addKeyListener(KeyListener l).

Для обработки событий клавиатуры необходимо реализовать интерфейс KeyListener или создать класс-наследник класса KeyAdapter. Класс KeyAdapter является пустым классом, реализующим интерфейс KeyListener. Использовать класс KeyAdapter удобно, если требуется обрабатывать только некоторые события клавиатуры. Удобно использовать внутренние или анонимные классы.

Пример.

Реализация интерфейса KeyListener.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class KeyEventExample extends JFrame implements KeyListener {

public KeyEventExample() {

setSize(400, 300);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

addKeyListener(this);

}

public void keyTyped(KeyEvent e) {

}

public void keyPressed(KeyEvent e) {

}

public void keyReleased(KeyEvent e) {

}

}

Использование внутреннего класса в качестве обработчика.

public class KeyEventExample extends JFrame {

class MyKeyAdapter extends KeyAdapter {

public void keyPressed(KeyEvent e) {

}

}

public KeyEventExample() {

setSize(400, 300);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

addKeyListener(new MyKeyAdapter());

}

}

Подобным же образом можно создать внутренний класс, реализующий интерфейс KeyListener.

Использование анонимного класса.

public class KeyEventExample extends JFrame {

public KeyEventExample() {

setSize(400, 300);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {

}

});

}

}

Подобным же образом можно создать анонимный класс, реализующий интерфейс KeyListener.

6.3. События мыши.

6.3.1. Нажатие кнопки мыши.

6.3.2. Перемещение мыши.

6.4. События элементов пользовательского интерфейса.

6.4.1. Класс JButton.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Controls1 extends JFrame {

private JLabel label;

private JButton button;

private int cnt = 0;

public Controls1() {

super("Заголовок окна");

setSize(200, 100);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

button = new JButton("Кнопка");

button.setBounds(0, 0, 100, 25);

button.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

label.setText("Количество нажатий: " +

String.valueOf(++cnt));

}

});

add(button);

label = new JLabel("Кнопка ни разу не нажата");

label.setBounds(0, 50, 200, 25);

add(label);

}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

new Controls1().setVisible(true);

}

});

}

}

6.4.2. Класс JCheckBox.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Controls2 extends JFrame implements ItemListener {

private JLabel label;

private JCheckBox cb1, cb2, cb3;

private boolean state[];

public Controls2() {

super("Заголовок окна");

setSize(200, 200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

state = new boolean[3];

cb1 = new JCheckBox("Пункт 1");

cb1.setBounds(0, 0, 200, 25);

cb1.addItemListener(this);

add(cb1);

cb2 = new JCheckBox("Пункт 2");

cb2.setBounds(0, 30, 200, 25);

cb2.addItemListener(this);

add(cb2);

cb3 = new JCheckBox("Пункт 3");

cb3.setBounds(0, 60, 200, 25);

cb3.addItemListener(this);

add(cb3);

label = new JLabel();

label.setBounds(0, 50, 200, 25);

add(label);

showState();

}

public void itemStateChanged(ItemEvent e) {

int i;

if(e.getSource() == cb1)

i = 0;

else if(e.getSource() == cb2)

i = 1;

else if(e.getSource() == cb3)

i = 2;

else

return;

if(e.getStateChange() == ItemEvent.SELECTED)

state[i] = true;

else

state[i] = false;

showState();

}

private void showState() {

String text = "Выбраны пункты:";

for(int i = 0; i < state.length; i++)

if(state[i])

text += " " + (i + 1);

label.setText(text);

}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

new Controls2().setVisible(true);

}

});

}

}

6.4.3. Класс JRadioButton.

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class Controls3 extends JFrame implements ItemListener {

private JLabel label;

private JRadioButton rb1, rb2, rb3;

private ButtonGroup radioGroup;

private int sel = 0;

public Controls3() {

super("Заголовок окна");

setSize(200, 200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

rb1 = new JRadioButton("Пункт 1", true);

rb1.setBounds(0, 0, 200, 25);

rb2 = new JRadioButton("Пункт 2", false);

rb2.setBounds(0, 30, 200, 25);

rb3 = new JRadioButton("Пункт 3", false);

rb3.setBounds(0, 60, 200, 25);

radioGroup = new ButtonGroup();

radioGroup.add(rb1);

radioGroup.add(rb2);

radioGroup.add(rb3);

rb1.addItemListener(this);

rb2.addItemListener(this);

rb3.addItemListener(this);

add(rb1);

add(rb2);

add(rb3);

label = new JLabel();

label.setBounds(0, 50, 200, 25);

add(label);

showState();

}

public void itemStateChanged(ItemEvent e) {

int i;

if(e.getSource() == rb1)

sel = 0;

else if(e.getSource() == rb2)

sel = 1;

else if(e.getSource() == rb3)

sel = 2;

else

return;

showState();

}

private void showState() {

label.setText("Выбран пункт: " + (sel + 1));

}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

public void run() {

new Controls3().setVisible(true);

}

});

}

}

Соседние файлы в папке Лекции