Урок 30: Обработка событий
Обработка событий является ключевой частью создания интерактивных графических интерфейсов пользователя (GUI). События могут быть различными, такими как нажатие кнопки, перемещение мыши, ввод текста и другие. В Java обработка событий осуществляется с помощью интерфейсов, таких как ActionListener
, MouseListener
и KeyListener
. В этом уроке мы рассмотрим, как обрабатывать события и реагировать на действия пользователя.
Обработка событий кнопок
Для обработки событий нажатия кнопок используется интерфейс ActionListener
. Рассмотрим пример обработки нажатия кнопки:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ButtonClickExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Обработка событий");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("Нажми меня");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Кнопка нажата!");
}
});
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
}
Результат выполнения
При нажатии кнопки в консоль будет выведено сообщение "Кнопка нажата!".
Обработка событий мыши
Для обработки событий мыши используется интерфейс MouseListener
. Пример обработки событий мыши:
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MouseEventExample {
public static void main(String[] args) {
JFrame frame = new JFrame("События мыши");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Мышь нажата!");
}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
});
frame.add(panel);
frame.setVisible(true);
}
}
Результат выполнения
При нажатии кнопки мыши в пределах панели в консоль будет выведено сообщение "Мышь нажата!".
Упражнения
Упражнение 1: Обработка событий кнопки
Напишите программу, которая создает окно с кнопкой "Счетчик". При каждом нажатии на кнопку значение счетчика должно увеличиваться на 1 и выводиться в консоль.
Решение:
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CounterExample {
private static int counter = 0;
public static void main(String[] args) {
JFrame frame = new JFrame("Счетчик");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
JButton button = new JButton("Счетчик");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
counter++;
System.out.println("Счетчик: " + counter);
}
});
panel.add(button);
frame.add(panel);
frame.setVisible(true);
}
}
Объяснение: Программа создает окно с кнопкой "Счетчик". При каждом нажатии на кнопку значение счетчика увеличивается на 1 и выводится в консоль.
Упражнение 2: Обработка событий мыши
Напишите программу, которая создает окно с панелью. При каждом нажатии кнопки мыши в пределах панели в консоль должно выводиться сообщение с координатами нажатия.
Решение:
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MouseCoordinatesExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Координаты мыши");
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("Координаты: (" + e.getX() + ", " + e.getY() + ")");
}
@Override
public void mousePressed(MouseEvent e) {}
@Override
public void mouseReleased(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
});
frame.add(panel);
frame.setVisible(true);
}
}
Объяснение: Программа создает окно с панелью. При каждом нажатии кнопки мыши в пределах панели в консоль выводится сообщение с координатами нажатия.