Capítulo 12 Eventos de interacção Eventos, fontes

Propaganda
Capítulo 12
Eventos de interacção
Eventos em Java
Referência aos pacotes awt e swing
Programação com botões e campos de texto
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
Introdução à Programação
2007/08
A. Lopes
Algumas classes do pacote awt
Object
Component
AWT
Container
Button
MenuComponent
Menubar
Label
Window
MenuItem
Menu
TextComponent
Panel
Frame
Introdução à Programação
TextArea
2007/08
TextField
A. Lopes
Algumas classes do pacote swing
Object
Component
Container
JComponent
JLabel
JMenuBar
JPanel
JCheckBox
Introdução à Programação
JButton
JToogleButton
Objectos visuais
JScrollBar
JTextField
JRadioButton
2007/08
...
JFileChooser
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 é:
public interface ActionListener {
public void actionPerformed(ActionEvent evento);
}
• 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
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.");
}
}
Introdução à Programação
2007/08
A. Lopes
Ficheiro ButtonTester.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
Gestão de
eventos/acções
1011
1100,0
Introdução à Programação
2007/08
A. Lopes
Aplicação com botões
• Criação de um objecto da classe JButton
JButton button = new JButton("Add Interest");
• Utilização de um objecto da classe JLabel para mostrar a mensagem
JLabel label = new JLabel("balance="+account.getBalance());
• Utilização de um objecto da classe JPanel para conter/agrupar as
várias componentes utilizadas na interface
JPanel panel = new JPanel();
panel.add(button);
panel.add(label);
frame.add(panel); // adiciona o painel à janela
Introdução à Programação
2007/08
A. Lopes
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
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
• 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);
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
JLabel rateLabel = new JLabel("Interest Rate: ");
• 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());
...
}
}
Introdução à Programação
2007/08
A. Lopes
Ficheiro InvestmentViewer2.java
Introdução à Programação
2007/08
A. Lopes
Algumas componentes do pacote swing
api/javax/swing
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
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.
Introdução à Programação
2007/08
A. Lopes
Download