Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Тема 7.6 Использование кнопок и обработка событий



 

Кнопка является одним из самых простых управляющих элементов Swing. В то же время она используется чаще других компонентов. Кнопка представляет собой экземпляр класса JButton. Этот класс является потомком абстрактного класса AbstractButton, в котором определены функции, общие для всех кнопок. На кнопке может отображаться текст, изображение или информация обоих типов. В данном модуле используются только кнопки с надписями в виде строки текста. Класс JButton содержит три конструктора. Один из них имеет следующий вид:

JButton(Stringmsg)

Параметр msg определяет строку, которая должна отображаться на кнопке.

По щелчку на кнопке генерируется событие ActionEvent. Для регистрации и отключения обработчиков данного события JButton предоставляет следующие методы (они унаследованы от класса AbstractButton):

void addActionListener(ActionListener al)

void removeActionListener(ActionListener al)

Здесь параметр al задает объект, который будет оповещаться о возникновении событий. Объект должен представлять собой экземпляр класса, реализующего интерфейс ActionListener.

В интерфейсе ActionListener определен только один метод: actionPerformed(). Объявление этого метода выглядит следующим образом:

void actionPerformed(ActionEventae)

Данный метод вызывается по щелчку на кнопке, т.е. он занимается обработкой событий, связанных с действиями пользователя с кнопкой. Реализуя метод actionPerformed(), необходимо позаботиться о том, чтобы он быстро выполнял свою задачу и возвращал управление. Как было сказано ранее, обработчики не должны выполнять длительных операций, поскольку это может привести к замедлению работы всего приложения. Если же обработка события предполагает действия, требующие длительного времени, их надо выполнять в потоке, специально создаваемом для этой цели.

Объект ActionEvent, передаваемый методу actionPerformed(), позволяет получить важную информацию, связанную с событием данного типа. В данном модуле мы будем использовать строку команды действия, связанной с кнопкой. По умолчанию в качестве команды действия принимается строка, отображаемая на кнопке. Для получения команды действия надо вызвать метод getActionCommand(), принадлежащий объекту события. Он объявляется следующим образом:

StringgetActionCommand()

Команда действия идентифицирует кнопку. Таким образом, если в приложении имеется несколько кнопок, команда действия позволяет достаточно просто определить, какая из них явилась источником события.

Листинг 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);

}

}

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-30; Просмотров: 447; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.024 с.)
Главная | Случайная страница | Обратная связь