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
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 Object AWT Component MenuComponent Container Button Menubar MenuItem Window Panel Label TextComponent Menu Frame TextArea TextField
Algumas classes do pacote swing Object Component Container JComponent Objectos visuais JLabel JMenuBar JButton JScrollBar JTextField... JPanel JCheckBox JToogleButton JRadioButton JFileChooser 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);
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 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);
Aplicação com botões sempre que o botão é pressionado, acrescenta os respectivos juros ao saldo Modelo-Interacção-Controlo 1011 1100,0 Gestão de eventos/acções
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 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());
Ficheiro InvestmentViewer1.java 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);
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());... Ficheiro InvestmentViewer2.java
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. 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.