
- •Программирование на Java
- •Глава 1 Введение в java. Основы языка.
- •Тема 1.1 Язык программирования java.
- •Тема 1.2 Состав пакета Java2.
- •Тема 1.3 Настройка среды окружения.
- •Тема 1.4 Структура Java-программы.
- •Тема 1.5 Набор текста, запуск и компиляция простейшей программы.
- •Тема 1.6 Подробное рассмотрение кода простейшей программы.
- •Тема 1.7. Создание программы в разных средах разработки.
- •Тема 1.8 Лексические основы языка
- •Тема 1.9 Элементарные типы данных.
- •Тема 1.10 Преобразование типов.
- •Арифметические операции
- •Операции сравнения
- •Тема 1.11 Кoнсольный ввод с помощью класса java.Util.Scanner
- •Тема 1.12 Классы-оболочки
- •Тема 1.13 Автоупакока и автораспаковка.
- •Тема 1.14 Операторы
- •1.14.1 Блок
- •1.14.2 Условный оператор if
- •1.14.4 Оператор цикла while
- •1.14.5 Оператор цикла do-while
- •1.14.6 Оператор цикла for
- •1.14.7 Оператор continue и метки
- •1.14.8 Оператор break
- •1.14.9 Оператор варианта switch
- •Тема 1.15 Статический импорт
- •Тема 1.16 Класс Math
- •Задания
- •Тема 1.17 Псевдослучайные числа
- •Тема 1.18 Генерация случайных чисел
- •Тема 1.19 Массивы в Java
- •1.19.1 Объявление и заполнение массива
- •1.19.2 Сортировка массива
- •Сортировка выбором
- •Сортировка методом пузырька
- •1.19.3 Многомерные массивы
- •Задания
- •1.19.4 Нерегулярные массивы
- •Глава 2 классы
- •Тема 2.1 Основы классов
- •Тема 2.2 Общая форма класса
- •Тема 2.3 Объявление объектов
- •Тема 2.4 Более подробное рассмотрение операции new
- •Тема 2.5 Присваивание переменных объектных ссылок
- •Тема 2.6 Знакомство с методами
- •Тема 2.7 Возвращение значения из метода
- •Тема 2.8 Добавление метода, принимающего параметры
- •Тема 2.9 Конструкторы
- •Тема 2.10 Сборка мусора
- •Тема 2.11 Перегрузка методов
- •Тема 2.12 Перегрузка конструкторов
- •Тема 2.13 Использование объектов в качестве параметров
- •Тема 2.14 Более пристальный взгляд на передачу аргументов
- •Тема 2.16 Рекурсия
- •Тема 2.17 Введение в управление доступом
- •Тема 2.18 Ключевое слово static
- •Тема 2.19 Ключевое слово final
- •Тема 2.20 Аргументы переменной длины
- •Тема 2.21 Строки и числа
- •Тема 2.22 Нумерованные типы
- •Глава 3 наследование и интерфейсы
- •Тема 3.1 Основы наследования
- •Тема 3.2 Наследование и доступ к членам класса
- •Тема 3.3 Конструкторы и наследование
- •Тема 3.4 Использование ключевого слова super для вызова конструктора суперкласса
- •Тема 3.5 Использование ключевого слова super для доступа к членам суперкласса
- •Тема 3.6 Многоуровневая иерархия
- •Тема 3.7 Когда вызываются конструкторы
- •Тема 3.8 Объекты подклассов и ссылки на суперклассы
- •Тема 3.9 Переопределение методов
- •Тема 3.10 Переопределение методов и поддержка полиморфизма
- •Тема 3.11 Использование абстрактных классов
- •Тема 3.12 Использование ключевого слова final
- •Тема 3.13 Предотвращение переопределения методов
- •Тема 3.14 Предотвращение наследования
- •Тема 3.15 Класс Object
- •Тема 3.16 Интерфейсы
- •3.16.1 Объявление интерфейса.
- •3.16.2 Реализация интерфейсов
- •3.16.3 Использование ссылок на интерфейсы
- •3.16.4 Переменные в составе интерфейсов
- •3.16.5 Наследование интерфейсов
- •Тема 3.17 Пакеты и ограничение доступа
- •Тема 3.18 Внутренние классы
- •3.18.1 Внутренние (inner) классы
- •3.18.2 Вложенные (nested) классы
- •3.18.3 Анонимные (anonymous) классы
- •Глава 4 Обработка исключительных ситуаций
- •Тема 4.1 Исключения в Java
- •Тема 4.2 Типы исключений
- •Тема 4.3 Неперехваченные исключения
- •Тема 4.4 Ключевые слова try и catch
- •Тема 4.6 Ключевое слово throw
- •Тема 4.7 Ключевое слово throws
- •Тема 4.8 Ключевое слово finally
- •Ошибка при выполнении метода1 java.Lang.ArithmeticException: Demo
- •Тема 4.9 Потомки Exception или написание своих классов ошибок
- •Глава 5 Универсальные типы. КоллекциИ
- •Тема 5.1 Общие сведения об универсальных типах
- •Тема 5.2 Универсальный класс с двумя параметрами типа
- •Тема 5.3 Ограниченные типы
- •Тема 5.4 Использование групповых параметров
- •Тема 5.5 Универсальные методы
- •Тема 5.6 Универсальные интерфейсы
- •Тема 5.7 Ошибки неоднозначности
- •Тема 5.8 Ограничения универсальных типов
- •Тема 5.9 Краткий обзор коллекций
- •5.9.1 Класс ArrayList
- •5.9.2 Класс LinkedList
- •5.9.3 Класс HashSet
- •5.9.4 Класс TreeSet
- •5.9.5 Доступ к коллекции через итератор
- •5.9.6 Алгоритмы коллекций
- •Глава 6 jdbc (Java DataBase Connectivity) Тема 6.1 Драйверы, соединения и запросы
- •Тема 6.2 Простое соединение и простой запрос
- •Тема 6.2 Класс ResultSet
- •Тема 6.3 Метаданные
- •Тема 6.4 Подготовленные запросы
- •Глава 7 Swing и пользовательский интерфейс
- •Тема 7.1 Общие сведения о swing
- •Тема 7.2 Архитектура mvc
- •Тема 7.3 Контейнер и компоненты
- •Тема 7.4 Простая программа, использующая средства Swing
- •Тема 7.5 Поддержка событий
- •Тема 7.6 Использование кнопок и обработка событий
- •Тема 7.7 Краткие сведения о диспетчерах компоновки
- •Тема 7.8 Пример использования jdbc и swing вместе
Тема 7.6 Использование кнопок и обработка событий
Кнопка является одним из самых простых управляющих элементов Swing. В то же время она используется чаще других компонентов. Кнопка представляет собой экземпляр класса JButton. Этот класс является потомком абстрактного класса AbstractButton, в котором определены функции, общие для всех кнопок. На кнопке может отображаться текст, изображение или информация обоих типов. В данном модуле используются только кнопки с надписями в виде строки текста. Класс JButton содержит три конструктора. Один из них имеет следующий вид:
JButton(String msg)
Параметр msg определяет строку, которая должна отображаться на кнопке.
По щелчку на кнопке генерируется событие ActionEvent. Для регистрации и отключения обработчиков данного события JButton предоставляет следующие методы (они унаследованы от класса AbstractButton):
void addActionListener(ActionListener al)
void removeActionListener(ActionListener al)
Здесь параметр al задает объект, который будет оповещаться о возникновении событий. Объект должен представлять собой экземпляр класса, реализующего интерфейс ActionListener.
В интерфейсе ActionListener определен только один метод: actionPerformed(). Объявление этого метода выглядит следующим образом:
void actionPerformed(ActionEvent ae)
Данный метод вызывается по щелчку на кнопке, т.е. он занимается обработкой событий, связанных с действиями пользователя с кнопкой. Реализуя метод actionPerformed(), необходимо позаботиться о том, чтобы он быстро выполнял свою задачу и возвращал управление. Как было сказано ранее, обработчики не должны выполнять длительных операций, поскольку это может привести к замедлению работы всего приложения. Если же обработка события предполагает действия, требующие длительного времени, их надо выполнять в потоке, специально создаваемом для этой цели.
Объект ActionEvent, передаваемый методу actionPerformed(), позволяет получить важную информацию, связанную с событием данного типа. В данном модуле мы будем использовать строку команды действия, связанной с кнопкой. По умолчанию в качестве команды действия принимается строка, отображаемая на кнопке. Для получения команды действия надо вызвать метод getActionCommand(), принадлежащий объекту события. Он объявляется следующим образом:
String getActionCommand()
Команда действия идентифицирует кнопку. Таким образом, если в приложении имеется несколько кнопок, команда действия позволяет достаточно просто определить, какая из них явилась источником события.
Листинг 7.2
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MyFrame extends JFrame implements ActionListener {
private JPanel panel;
private JLabel label1, label2;
private JButton button1, button2;
private JTextField textField1, textField2;
public MyFrame() {
//установка заголовка и размеров фрейма
setTitle("Заголовок");
setBounds(700, 300, 200, 150);
panel = new JPanel();
//создание всех компонент
label1 = new JLabel("Метка 1");
label2 = new JLabel("Метка 2");
button1 = new JButton("Кнопка 1");
button2 = new JButton("Кнопка 2");
textField1 = new JTextField("Новый текст1", 10);
textField2 = new JTextField("Новый текст2", 10);
// добавление компонент к панели
panel.add(label1);
panel.add(label2);
panel.add(button1);
panel.add(button2);
panel.add(textField1);
panel.add(textField2);
//добавление панели к фрейму
add(panel);
//добавление кнопок к прослушиванию
button1.addActionListener(this);
button2.addActionListener(this);
// установка операции по нажатию на крестик
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// прорисовка фрейма
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
//в метку 1 выводим текст из текстового поля 1
if (e.getActionCommand().equals("Кнопка 1")) {
label1.setText(textField1.getText());
}
//в метку 2 выводим текст из текстового поля 2
if (e.getActionCommand().equals("Кнопка 2")) {
label2.setText(textField2.getText());
}
}
}
public class Main {
public static void main(String[] args) {
new MyFrame();
}
}
На рисунке 7.2 показан фрейм до нажатия на кнопки, а на рисунке 7.3 – после.
Рисунок 7.2 Рисунок 7.3
Если элементов много, то обрабатывать сабытия в одном методе не очень удобно. В листинге 7.3 приведен пример того же класса, только обработка событий сделана с помощью неименованных внутренних классов.
Листинг 7.3
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MyFrame extends JFrame {
private JPanel panel;
private JLabel label1, label2;
private JButton button1, button2;
private JTextField textField1, textField2;
public MyFrame() {
//установка заголовка и размеров фрейма
setTitle("Заголовок");
setBounds(700, 300, 200, 150);
panel = new JPanel();
//создание всех компонент
label1 = new JLabel("Метка 1");
label2 = new JLabel("Метка 2");
button1 = new JButton("Кнопка 1");
button2 = new JButton("Кнопка 2");
textField1 = new JTextField("Новый текст1", 10);
textField2 = new JTextField("Новый текст2", 10);
// добавление компонент к панели
panel.add(label1);
panel.add(label2);
panel.add(button1);
panel.add(button2);
panel.add(textField1);
panel.add(textField2);
//добавление панели к фрейму
add(panel);
//добавление кнопок к прослушиванию
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label1.setText(textField1.getText());
}
});
button2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
label2.setText(textField2.getText());
}
});
// установка операции по нажатию на крестик
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// прорисовка фрейма
setVisible(true);
}
}