Capítulo 12
Eventos de interacção
Eventos em JavaReferência aos pacotes awt e swing
Programação com botões e campos de texto
Introdução à Programação 2007/08 A. Lopes
Eventos, fontes de eventos e
atendimento de eventos
• Qualquer programa deve reagir/processar eventos. Por exemplo, eventos de interacção com o utilizador: pressão em teclas,
movimento do rato, clicks nos botões do rato, etc.
• Ao surgir um evento, desencadeia-se a notificação do atendedor de eventos. Este pertence a uma classe definida pelo programador da aplicação e os seus métodos descrevem as acções a realizar após o evento
• Um programa indica os eventos que pretende receber criando objectos de atendimento de eventos. Note-se que, em geral, um programa evita ser sistematicamente interrompido por eventos que não considera relevantes
Introdução à Programação 2007/08 A. Lopes
Pacotes awt e swing
• O pacote java.awt (Abstract Windowing Toolkit) do Java é apropriado para a manipulação de janelas gráficas e eventos associados
• O pacote javax.swing incorpora uma melhoria do awt, sendo escrito no topo deste último. As componentes de ambos podem ser utilizadas indistintamente, aumentando assim a versatilidade dos programas com janelas gráficas
Algumas classes do pacote awt
ObjectMenuComponent Component
Container Button Menubar MenuItem
Window
Label
TextComponent Panel
Menu
Frame TextArea TextField
Introdução à Programação 2007/08 A. Lopes
Algumas classes do pacote swing
Object Component Container JPanel JComponent JScrollBar JMenuBar
JLabel JButton JTextField ...
JRadioButton JToogleButton
JCheckBox JFileChooser
Objectos visuais
Introdução à Programação 2007/08 A. Lopes
Exemplo: botão e respectivo
atendedor de eventos
• Criação do botão com uma componente JButton, ao qual se associa um ActionListener. A interface de ActionListener é:
• Definição de uma classe com o método actionPerformed, contendo as instruções a executar quando o botão é pressionado. O parâmetro evento contém os detalhes do evento, tais como o momento em que este ocorreu
• Criação de um objecto de atendedor de eventos e respectiva associação ao botão
public interface ActionListener {
public void actionPerformed(ActionEvent evento); }
ActionListener listener = new ClickListener(); button.addActionListener(listener);
Introdução à Programação 2007/08 A. Lopes
Ficheiro ClickListener.java
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;
/** Um atendedor de eventos que escreve uma mensagem no ecrã. */ public class ClickListener implements ActionListener {
public void actionPerformed(ActionEvent event) { System.out.println("I was clicked.");
} }
Ficheiro Button
Tester
.java
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
/** Instalação de um atendedor de eventos (action listener). */
public class ButtonTester {
private static final int FRAME_WIDTH = 100; private static final int FRAME_HEIGHT = 60; !
public static void main(String[] args) {
JFrame frame = new JFrame(); // a janela com barra de título JButton button = new JButton("Click me!!"); // cria e adiciona um botão frame.add(button);
// define um atendedor de eventos e associa-o ao botão ActionListener listener = new ClickListener();
button.addActionListener(listener);
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT); // define a dimensão da janela // quando a janela fechar, o programa deve terminar
// (programa e janela gráfica são conceitos distintos) frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
Introdução à Programação 2007/08 A. Lopes
Aplicação com botões
sempre que o botão é pressionado, acrescenta os respectivos juros ao saldo
Introdução à Programação 2007/08 A. Lopes
Modelo-Interacção-Controlo
1011 1100,0
Gestão de eventos/acções
Introdução à Programação 2007/08 A. Lopes
Aplicação com botões
• Criação de um objecto da classe JButton
• Utilização de um objecto da classe JLabel para mostrar a mensagem
• Utilização de um objecto da classe JPanel para conter/agrupar as várias componentes utilizadas na interface
JButton button = new JButton("Add Interest");
JLabel label = new JLabel("balance="+account.getBalance());
JPanel panel = new JPanel(); panel.add(button);
panel.add(label);
frame.add(panel); // adiciona o painel à janela
Aplicação com botões
• A classe Listener calcula o juro e mostra o novo saldo
• Incluir a classe AddInterestListener como “inner class” - classe declarada dentro de outra classe - de modo a que possa aceder às variáveis próximas account (da conta bancária) e label
class AddInterestListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
double interest = account.getBalance() * INTEREST_RATE / 100; account.deposit(interest);
label.setText("balance=" + account.getBalance()); }
Introdução à Programação 2007/08 A. Lopes
Ficheiro InvestmentViewer1.java
Introdução à Programação 2007/08 A. Lopes
Processamento de texto de entrada
• Utilização de componente JTextField para disponibilizar espaço para entrada de informação
final int FIELD_WIDTH = 10; // em caracteres
final JTextField rateField = new JTextField(FIELD_WIDTH);
Para além de acrescentar os respectivos juros ao saldo sempre que o botão é pressionado, inclui um campo de texto para indicar a taxa de juro
Introdução à Programação 2007/08 A. Lopes
Processamento de texto de entrada
• Colocação de uma componente JLabel junto de cada campo de texto
• Disponibilização de um botão para o utilizador sinalizar que a informação de texto fornecida deve ser processada
• O método actionPerformed associado ao botão lê a informação escrita pelo utilizador nos campos de texto através do método getText() class AddInterestListener implements ActionListener { public void actionPerformed(ActionEvent event) {
double rate = Double.parseDouble(rateField.getText()); ...
} }
JLabel rateLabel = new JLabel("Interest Rate: ");
JButton An implementation of a "push" button.
JCheckBox An implementation of a check box - an item that can be selected or deselected, and which displays its state to the user.
JCheckBoxMenuItem A menu item that can be selected or deselected.
JComboBox A component that combines a button or editable field and a drop-down list. JComponent The base class for all Swing components except top-level containers. JFileChooser JFileChooser provides a simple mechanism for the user to choose a file. JFrame An extended version of java.awt.Frame that adds support for the JFC/Swing component architecture.
JLabel A display area for a short text string or an image, or both.
JMenu An implementation of a menu - a popup window containing JMenuItems that is displayed when the user selects an item on the JMenuBar.
JMenuBar An implementation of a menu bar. JMenuItem An implementation of an item in a menu.
JOptionPane makes it easy to pop up a standard dialog box that prompts users for a value or informs them of something.
JPanel is a generic lightweight container.
JPopupMenu An implementation of a popup menu - a small window that pops up and displays a series of choices.
Introdução à Programação 2007/08 A. Lopes
Algumas componentes do pacote swing
api/javax/swing
Introdução à Programação 2007/08 A. Lopes
Algumas componentes do pacote swing
JRadioButton An implementation of a radio button - an item that can be selected or deselected, and which displays its state to the user.
JRadioButtonMenuItem An implementation of a radio button menu item. JScrollBar An implementation of a scrollbar.
JScrollPane Provides a scrollable view of a lightweight component.
JSeparator JSeparator provides a general purpose component for implementing divider lines - most commonly used as a divider between menu items that breaks them up into logical groupings.
JSlider A component that lets the user graphically select a value by sliding a knob within a bounded interval.
JSpinner A single line input field that lets the user select a number or an object value from an ordered sequence.
JTextArea A JTextArea is a multi-line area that displays plain text.
JTextField JTextField is a lightweight component that allows the editing of a single line of text. JTextPane A text component that can be marked up with attributes that are represented graphically.
JToggleButton An implementation of a two-state button.