Programação por Objectos. Interfaces gráficas. MEEC@IST Swing 1/52



Documentos relacionados
Programação por Objectos. Interfaces gráficas. Swing 1/68

8. Interfaces Gráficas de Usuário

Construção de Interfaces Gráficas

Objectivos:. Construir programas com interfaces gráficas Graphical User Interface (GUI) application programs

Programação III. Interface Gráfica - Swing. Interface Gráfica Swing Jocélio Passos joceliodpassos@bol.com.br. Interface Gráfica - Swing

Java - Swing. Raphaela Galhardo raphaela@j2eebrasil.com.br

Interface com o Usuário (UI) UIs Desacopladas (2/3) BSI Bacharelado em Sistemas de Informação LOO Linguagens Orientadas a Objetos

Construção de Interfaces Gráficas - Introdução

JFC/Swing. Java Avançado Interface Gráfica JFC/Swing. Introdução JFC / Swing. Introdução JFC / Swing

Java Foundation Classes Coleção de pacotes para criação de aplicações completas Desktop Interfaces gráficas (GUIs- Graphical User Interface)

JAVA. Marcio de Carvalho Victorino. Interface Gráfica em Java (GUI)

Programação Visual em Java

Interface Gráfica com o Usuário (GUI) Profa. Isabel Harb Manssour (Material adaptado das aulas da Profa. Luciana Nedel e do Prof.

Entender princípios de projeto. Capacitação para construir GUIs. Entender os pacotes que contém componentes de GUI, e as classes e interfaces de

JAVA APLICAÇÕES GRÁFICAS Propriedade Utilizada: FontSizeAnimation

MÓDULO 4 SWING Parte 3

Fundamentos de GUIs. João Carlos Pinheiro. Última Atualização Junho / 2004 Versão: 3.0

Aula 11: Interfaces gráficas (1/2): elementos de interface Swing

Interfaces Gráficas: Interações Complexas

Programação Orientada a Objetos em Java. GUI Graphical User Interface

Gerenciadores de Layouts

Interface Gráfica. Prof. Marcelo Cohen. (material da Profa. Luciana Nedel) Graphical User Interface (GUI)

Programação Orientada a Objetos

Swing. Page 1. Swing. Prof. Anderson Augustinho Uniandrade

Interface Gráficas Parte I. Bruno Crestani Calegaro

Programação de Interfaces Gráficas. Aula 1. Carlos Eduardo de Carvalho Dantas

Universidade Federal de Uberlândia Faculdade de Computação GGI030 Programação Orientada a Objetos 2o. Semestre de 2017 Prof.

Caso não exista nenhum listener registado no objecto que gera o evento, este não terá qualquer efeito.

Criando interfaces com o usuário. Continuação

Capítulo 23. às s Interfaces Gráficas. Introdução. Rui Rossi dos Santos Programação de Computadores em Java Editora NovaTerra

PROGRAMAÇÃO ORIENTADA A OBJETOS -INTERFACES GRÁFICAS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Pacote Java Swing Parte 1

Aplicações Gráficas com AWT

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: Resize Shape Basic Shape FACULDADE DE TECNOLOGIA SENAC PELOTAS

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Programando GUIs

Programação Orientada a Objetos II

Criação de Applets Package: Class Name Base Class: Generate header comments: Can run standalone: Generate Standard methods:

Módulo 7. Interface Gráfica com o Usuário GUI - Introdução. Programação Orientada a Objetos I Java (Rone Ilídio)

Desenvolvimento de Aplicações Desktop

Curso de Aprendizado Industrial Desenvolvedor WEB

1) De acordo com o trecho de código escrito na linguagem JAVA, responda a questão abaixo:

O programa abaixo exemplifica o uso da classe Image para carregar e mostrar uma imagem localizada em um arquivo.

Interfaces Gráficas (GUIs) em Java usando Swing Parte I - O básico

JAVA APLICAÇÕES GRÁFICAS Propriedades Utilizadas: imagecomposite FACULDADE DE TECNOLOGIA SENAC PELOTAS

Capítulo 12 Eventos de interacção

Interface Gráfica. Prof. Marcelo Cohen

Arquitetura de Tratamento de Eventos em Programas com GUI - Graphical User Interface

Introdução à Tecnologia Java 02/2012. Java Aula 04 MDI. 05/09/2012 Celso Olivete Júnior.

Agenda. JFC (Java FoundaNon Classes) Interfaces Gráficas: layout manager JFC. Componentes do Swing. Pluggable Look and Feel

Interface Gráfica. LPG II Java Interface Gráfica AWT. Introdução. AWT - Abstract Window Toolkit

Programação Gráfica em Java.

Como construir aplicaçõ e applets

Tratamento de Eventos

Técnicas de Programação II

Layout. Programação Orientada a Objetos Java. Prof. Geraldo Braz Junior. Baseado em material original de João Carlos Pinheiro CEFET/MA

Programação Java. Construção de Interfaces com Swing (I)

Gerenciadores de Layout

Eclipse IDE Dá-se importância aos antepassados quando já não temos nenhum. Francois Chateaubriand

JFrame. JLabel : Utilizado como rótulo para exibição de texto e ícones. Interface Gráfica de JAVA - Graphical User Interface (GUI)

Linguagem Java - Prof. Luciana Porcher Nedel 1. Um container genérico e visual. Ela trabalha em cooperação com o controle de layouts.

Interfaces Gráficas. Componentes Gráficos Gestores de Posicionamento Manipuladores de Eventos. (Livro Big Java, Late Objects Capítulos 10 e 11)

Curso de Java Módulo II Swing Fábio Mengue Centro de Computação - Unicamp

Programação de Aplicações Gráficas em Java

Roteiro para criação de Applet

Programação Orientada a Objetos II

INTERFACE COM O USUÁRIO (em Java) Programação Orientada a Objetos

API Swing Java. 1. Introdução. 2. Objetivos. 3. Surgimento do Swing. André Scarmagnani 1, Matheus Madalozzo 1, Miguel Diogenes Matrakas 1

Interfaces Gráficas (GUIs) em Java usando Swing

Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe Frame

Natureza do Software e dos Sistemas

Interfaces Gracas em Java

Componentes GUI A aparência e maneira como um usuário pode interagir com componentes AWT diferem de acordo com a plataforma. Componentes Swing permite

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

Is Event Dispatcher Threade (Animation)

Desenvolvendo aplicações

CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA A F B G C H D I E J

Curso Java Starter. 1

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

JFC/Swing. LPGII - Java Interface Gráfica JFC/Swing. Introdução JFC / Swing. Introdução JFC / Swing

AWT Versus Swing. Java Deployment Course: Aula 5. por Jorge H C Fernandes (jhcf@di.ufpe.br) CESAR-DI-UFPE Recife, 1999

Componentes Parte 03

Programação Java. Construção de Interface gráfica. Processo Básico: OO + Eventos. Exemplo

Exercício 1 : As classes abaixo serão utilizadas neste exercício: public class Ponto { int x; int y; public Ponto(int x, int y){ this.

JCheckbox JRadioButton JComboBox JList JMenu... Alguns componentes já vistos em aula JButton JLabel JTextField

Introdução ao Processamento de Imagens Digitais em Java com Aplicações em Ciências Espaciais

1 Criando um aplicativo visual em Java

Aula 12 POO 1 Interface Gráfica no Java. Profa. Elaine Faria UFU

Especialização em Engenharia de Software - CEUT

Componentes da Interface Gráfica da Linguagem Java

Top-Level Containers. Interface com o Usuário. de classes empregadas para implementar a interface com o usuário.

Interface Gráfica Swing. Leonardo Gresta Paulino Murta

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

CA: Cidade: UF CARTÃO RESPOSTA QUESTÃO RESPOSTA QUESTÃO RESPOSTA A F B G C H D I

Como usar a documentaçã

{ System.exit(0); Exemplo (WindowAdapter) import java.awt.*; import java.awt.event.*;

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Introdução a programação gráfica em Java com Swing

Criação de Applets com o JBuilder Professor Sérgio Furgeri

Prof. Fernando V. Paulovich 25 de julho de SCC Programação Orientada a Objetos

Transcrição:

Programação por Objectos Interfaces gráficas MEEC@IST Swing 1/52

Introdução (1) O Java disponibiliza um conjunto de pacotes para geração de unidades de interface gráfica (GUI). AWT (Abstract Window Toolkit) pacote java.awt (import java.awt.*;) disponibilizado no JSE 1.1 dependente de código nativo Swing pacote javax.swing (import javax.swing.*;) disponibilizado no JSE 1.2 expande o AWT (17 pacotes na versão 1.4) MEEC@IST Swing 2/52

Introdução (2) O Swing possui componentes, que seguem a arquitectura MVC: Modelo Espaço de dados do componente (ex: barra de elevador possui 3 posições-mínimo, médio e máximo). Apresentação (view) Forma de visualização do componente (ex: janela Windows, com botão de fecho no canto superior direito). Controlador Forma como o componente interage com eventos (ex: clicar no rato). Componente Modelo Controlador Apresentação Delegação UI MEEC@IST Swing 3/52

Introdução (3) Componentes do Swing* JComponent JPanel JButton JFrame JDialog JApplet Tudo o que surge na janela faz parte de uma hierarquia de um (ou mais) contentores de inclusão de instâncias de JFrame, JDialog ou JApplet. Nota: componentes do AWT possuem mesmo identificador, sem prefixo J! MEEC@IST Swing 4/52

Introdução (4) Component Button <<interface>> LayoutManager Container Panel Window JComponent Applet Frame Dialog AbstractButton JTextComponent JPanel JApplet JFrame JButton JTextField MEEC@IST Swing 5/52

Componentes Swing: contentores de topo JDialog JFrame MEEC@IST Swing 6/52

Componentes Swing: contentores intermédios JPanel JScrollPane JTabbedPane JSplitPane JToolBar MEEC@IST Swing 7/52

Componentes Swing: contentores especiais JPanel JInternalFrame JLayeredPane MEEC@IST Swing 8/52

Componentes Swing: componentes básicas JButton JComboBox JList JSlider JSpinner JMenu JTextField MEEC@IST Swing 9/52

Componentes Swing: componentes básicas JProgressBar JLabel JToolTip MEEC@IST Swing 10/52

Componentes Swing: componentes avançadas JColorChooser JFileChooser JTable JText JTree MEEC@IST Swing 11/52

Contentor (1) Um contentor recolhe todos os componentes a visualizar na janela. Os componentes vão sendo inseridos a partir do fundo (método add), em direcção do utilizador, formando uma pilha. Se necessário, os componentes podem ser deslocados para uma posição específica na pilha, ou eliminados. Há dois tipos de contentores: Panel (rectângulo com componentes) Window (janela) MEEC@IST Swing 12/52

Contentor (2) Métodos: Component add(component comp) adiciona componente no topo da pilha Component add(component comp, int index) adiciona componente numa posição específica void remove(int index) remove componente colocado numa posição void remove(component comp) remove componente da pilha MEEC@IST Swing 13/52

Componente (1) Um componente é a representação gráfica de tudo que pode ser desenhado no écran, podendo eventualmente interagir com o utilizador. As fronteiras são obrigatoriamente rectangulares (mesmo que o objecto seja um círculo): A dimensão de um componente é um objecto Dimension, de campos int height, width (altura e comprimento) As posições dos 4 lados de um componente num contentor é um objecto Insets, de campos int bottom, left, right, top. java.lang.object java.awt.component java.awt.container javax.swing.component MEEC@IST Swing 14/52

Componente (2) Cada componente possui o seu sistema de coordenadas ((0,0) no canto superior esquerdo). Uma posição é objecto de classe Point, de campos int x, y. Y X MEEC@IST Swing 15/52

Componente (3) Alteração da posição do contentor, onde o componente é posicionado, não modifica as coordenadas locais! Alguns métodos (227 ao todo, muitos herdados de Container): 1. Posição e área Dimension getsize(dimension rv) coloca em rv dimensões do componente [setsize altera dimensões] Dimension getpreferredsize() obtém dimensões básicas do componente [setpreferredsize altera dimensões básicas] MEEC@IST Swing 16/52

Componente (4) Point getlocation(point rv) coloca em rv localização do componente no contentor ascendente [setlocation altera localização do componente] int getheigth() obtém altura [getwidth obtém largura] int getx() obtém posição horizontal [gety obtém posição vertical] Rectangle getbounds() obtém dimensões da componente [setbounds desloca e altera dimensões do componente] MEEC@IST Swing 17/52

Componente (5) Insets getinsets(component comp) devolve as posições dos 4 lados do componente Container getparent() obtém contentor onde componente foi inserido 2. Aspecto void paint(graphics comp) afixa componente no écran 3. Reacção a eventos 4. Estado MEEC@IST Swing 18/52

Classe JFrame (1) O contentor JFrame contém: Barra de menus (opcional): Os menus contêm botões, que chamam métodos quando o rato é premido. Instância de JPanel: O painel pode conter contentores, JFrame, JDialog ou JApplet, uns em cima dos outros. java.lang.object java.awt.component java.awt.container java.awt.window java.awt.frame javax.swing.jframe MEEC@IST Swing 19/52

Classe JFrame (2) Parâmetros do construtor de JFrame: String title: título da janela. GraphicsConfiguration gc: configuração da janela. atributos dependem do sistema gráfico adoptado (X11, MS Windows, ). por omissão, o frame inicial é invisível. Campos: int EXIT_ON_CLOSE: acção no fecho da talha. MEEC@IST Swing 20/52

Classe JFrame (3) Métodos: void setvisible(boolean b) torna janela visível (true) ou invisível (false) setdefaultcloseoperation(int operation) define operação quando utilizador fecha janela (usualmente parâmetro é JFrame.EXIT_ON_CLOSE) setsize(int width,int height) fixa dimensão do frame pack() dimensiona o frame para conter todos os componentes Container getcontentpane() devolve o painel void setcontentpane(container pane) define o painel MEEC@IST Swing 21/52

Classe JFrame (4) Neste capítulo são descritos aspectos básicos de inserção no JPanel: Textos (objectos JLabel) Gráficos 2D (objectos Graphics2D) Botões (objectos JButton) (Swing é muito mais potente, manual Java Swing da O Reilly tem 1200+ páginas!) MEEC@IST Swing 22/52

Visualizacão (1) Textos e imagens são visualizados por instâncias de JLabel. Parâmetros do construtor de JLabel: String text: texto a visulizar Icon image: imagem a visualizar int horizontalalignment: alinhamento java.lang.object java.awt.component java.awt.container javax.swing.jcomponent javax.swing.jlabel SwingConstants.LEFT SwingConstants.CENTER (omissão figura) SwingConstants.RIGHT SwingConstants.LEADING (omissão texto) SwingConstants.TRAILING MEEC@IST Swing 23/52

Visualizacão (2) Métodos: void settext(string text) altera texto a visualizar void sethorizontalalignment(int align) define o alinhamento horizontal do texto MEEC@IST Swing 24/52

Visualizacão (3) import java.awt.*; import javax.swing.*; public static void main(string[] args) { // constroi frame JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame( Frame"); frame.setdefaultcloseoperation(jframe.exit_on_close); // constroi painel de texto JPanel p = new JPanel(); p.add(new JLabel("Hello Brave World!!!\u00ae ")); } frame.setcontentpane(p); frame.pack(); frame.setvisible(true); MEEC@IST Swing 25/52

Visualizacão (4) Reposicionamente de um objecto gráfico pode ser efectuado nas seguintes etapas: 1. Recolher dimensões do objecto (PreferredSize) 2. Deslocar objecto (setbounds) 3. Alterar dimensões do frame (setsize) 4. Tornar o frame visível (setvisible) MEEC@IST Swing 26/52

Visualizacão (5) // *** imprime mensagem deslocada public static void main(string[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("HelloWorldSwing"); frame.setdefaultcloseoperation(jframe.exit_on_close); Container pane = frame.getcontentpane(); pane.setlayout(null); JLabel b1 = new JLabel("Hello World"); pane.add(b1); } // *** desloca o texto Dimension size = b1.getpreferredsize(); b1.setbounds(150,25,size.width,size.height); // *** altera dimensoes da janela frame.setsize(300,100); frame.setvisible(true); MEEC@IST Swing 27/52

Gráficos (1) Capacidades gráficas do Graphics2D: Textos Linhas, rectângulos, polígonos, ovais Cores, fontes e preenchimento (fill) de zonas java.lang.object java.awt.graphics java.awt.graphics2d MEEC@IST Swing 28/52

Gráficos (2) Gráficos 2D são desenhados, numa extensão da classe JPanel, no método: paintcomponent(graphics g) O método paintcomponent nunca é chamado directamente. Todos os objectos são inseridos em coordenadas fixas: se a janela for redimensionada para tamanho menor, pode haver corte de objectos (ou mesmo desaparecimento). public class DrawingPanel extends JPanel { public void paintcomponent(graphics g) { Graphics2D g2 = (Graphics2D) g; super.paintcomponent(g); // inserção em g de objectos gráficos //... } } MEEC@IST Swing 29/52

Gráficos (3) Métodos: drawline(int x1, int y1, int x2, int y2) linha entre (x1,y1) e (x2,y2) drawoval(int x, int y, int width, int height) oval drawpolygon(int[] xpoints, int[] ypoints, int npoints) polígono fechado, definido por tabelas de coordenadas drawrect(int x, int y, int width, int height) rectângulo drawstring(string str, int x, int y) escreve cadeia de caracteres MEEC@IST Swing 30/52

Gráficos (4) Interface Shape determina definições básicas de objectos geométicos. As classes estáticas de implementação encontram-se no pacote java.awt.geom. <<interface>> Elipse2D.Double( double x, double y, double width, double height) Shape Rectangle2D.Double( Elipse2D.Double double x, double y, double width, double height) RoundRectangle2D.Double( double x, double y, double width, double height) Rectangle2D.Double MEEC@IST Swing 31/52

Gráficos (5) A classe Color define campos das principais cores (black, blue, green, red, ). Cores alteradas a partir da chamada do método: setpaint(color c) Métodos Graphics2D de alteração de cores: draw(shape s): contorno do objecto fill(shape s): interior do objecto java.lang.object java.awt.color MEEC@IST Swing 32/52

Gráficos (6) import java.awt.*; import java.awt.geom.*; import javax.swing.*; public class DrawingPanel extends JPanel { public void paintcomponent(graphics g) { Graphics2D g2 = (Graphics2D)g; super.paintcomponent(g); //*** insere rectangulo com texto g2.drawrect(30,30,80,20); g2.drawstring("texto",35,45); //*** insere circulo azul Ellipse2D circ = new Ellipse2D.Double(140,40,35,35); g2.setpaint(color.blue); g2.fill(circ); g2.setpaint(color.red); g2.draw(circ); } } MEEC@IST Swing 33/52

Gráficos (7) public static void main(string[] args) { JFrame f = new JFrame("Painel grafico"); f.setsize(200,120); f.setdefaultcloseoperation(jframe.exit_on_close); f.getcontentpane().add(new DrawingPanel()); f.setvisible(true); } MEEC@IST Swing 34/52

Gráficos (8) Fontes são objectos Font e o construtor de Font possui 3 parâmetros: String name (p.e., SansSerif ) int style (campos de Font, p.e., Font.PLAIN e Font.BOLD) int size (tamanho da fonte) java.lang.object java.awt.font MEEC@IST Swing 35/52

Gráficos (9) import java.awt.*; import java.awt.geom.*; import javax.swing.*; public class DrawingPanel extends JPanel { public void paintcomponent(graphics g) { Graphics2D g2 = (Graphics2D)g; super.paintcomponent(g); //*** insere rectangulo com texto com fonte pretendida g2.drawrect(30,30,80,20); Font f = new Font("SansSerif",Font.BOLD,18); g2.setfont(f); g2.drawstring("texto",35,45); //*** insere circulo azul Ellipse2D circ = new Ellipse2D.Double(140,40,35,35); g2.setpaint(color.blue); g2.fill(circ); g2.setpaint(color.red); g2.draw(circ); } } MEEC@IST Swing 36/52

Disposição gráfica (1) O Swing fornece diversas formas de disposição gráfica (layout) de contentores: A interface LayoutManager define as operações básicas de disposição de contentores em áreas distintas. O Swing fornece ao programador 7 implementações: 1. BorderLayout: [omissão do Window] dispõe de 5 áreas, topo (PAGE_START), base (PAGE_END) e três a meio (LINE_START, CENTER, LINE_END). 2. BoxLayout: dispõe os componentes na vertical ou na horizontal. MEEC@IST Swing 37/52

Disposição gráfica (2) 3. CardLayout: permite variar componentes de uma área. 4. FlowLayout: [omissão do Panel] dispõe os objectos uns ao lado dos outros. 5. GridBagLayout: distribui os componentes numa grelha, possibilitando que um componente ocupe mais de uma célula. 6. GridLayout: dispõe contentores numa matriz. 7. SpringLayout: disponibiliza um controlo das distâncias entre as fronteiras de cada componente. MEEC@IST Swing 38/52

BoxLayout (1) Parâmetros do construtor de BoxLayout: Container target int axis: eixos de empilhamento dos componentes BoxLayout.Y_AXIS vertical, do topo para a base BoxLayout.X_AXIS horizontal, da esquerda para a direita MEEC@IST Swing 39/52

BoxLayout (2) import java.awt.*; import javax.swing.*; public class MyComponent extends JComponent { public void paintcomponent(graphics g) { super.paintcomponent(g); // *** recolhe dimensoes int width = getwidth(); int height = getheight(); // *** desenha rectângulo vermelho g.setcolor(color.red); g.drawrect(0, 0, width-1, height-1); // *** desenha yo! g.setcolor(color.black); g.drawstring("yo!",20,20); MEEC@IST Swing 40/52

BoxLayout (3) // *** desenha olhos int eyey = height/3; int left = width/3; int right = 2*width/3; int radius = width/15; g.setcolor(color.yellow); g.filloval(left-radius, eyey-radius, radius*2, radius*2); g.filloval(right-radius, eyey-radius, radius*2, radius*2); // *** desenha boca g.setcolor(color.lightgray); g.fillrect(width/4,3*height/4, width/2, height/10); } } public MyComponent(int width, int height) { super(); setpreferredsize(new Dimension(width,height)); } MEEC@IST Swing 41/52

BoxLayout (4) public static void main(string[] args) { JFrame frame = new JFrame("MyComponents"); JComponent content = (JComponent) frame.getcontentpane(); content.setbackground(color.white); content.setlayout(new BoxLayout(content,BoxLayout.Y_AXIS)); content.add(new MyComponent(180,80)); content.add(new MyComponent(180,120)); content.add(new MyComponent(180,140)); frame.pack(); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setvisible(true); } MEEC@IST Swing 42/52

BoxLayout (5) public static void main(string[] args) { JFrame frame = new JFrame("MyComponents"); JComponent content = (JComponent) frame.getcontentpane(); content.setbackground(color.white); content.setlayout(new BoxLayout(content,BoxLayout.X_AXIS)); content.add(new MyComponent(180,80)); content.add(new MyComponent(180,120)); content.add(new MyComponent(180,140)); frame.pack(); frame.setdefaultcloseoperation(jframe.exit_on_close); frame.setvisible(true); } MEEC@IST Swing 43/52

GridLayout (1) Parâmetros do construtor de GridLayout: int rows: número de linhas (1º parâmetro) int columns: número de colunas (2º parâmetro) int hgap: distância na horizontal entre células (3º parâmetro) int vgap: distância na vertical entre células (4º parâmetro) MEEC@IST Swing 44/52

GridLayout (2) public static void main(string[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("Exemplo Grelha 2*3"); frame.setdefaultcloseoperation(jframe.exit_on_close); JPanel pane = new JPanel(); pane.setlayout(new GridLayout(2,3)); pane.add(new JButton("Botao (1,1)")); pane.add(new JLabel("Texto (1,2)")); pane.add(new JButton("Botao (1,3)")); pane.add(new JButton("Botao (2,1)")); pane.add(new JLabel("Texto (2,2)")); } frame.setcontentpane(pane); frame.pack(); frame.setvisible(true); MEEC@IST Swing 45/52

Eventos (1) Um evento é um acontecimento atómico de um dispositivo externo (ex: clicar num botão do rato ou premir caracter no teclado). As acções desencadeadas pelo evento são executadas através da chamada de um método específico, devendo o programador indicar o objecto ouvinte (listener) que fica à espera do evento. Classes de manipulação dos eventos devem importar import java.awt.event.*; MEEC@IST Swing 46/52

Eventos (2) Swing define 10 tipos de eventos, gerados por componentes: ActionEvent (componentes: Button, List, MenuItem) AdjustmentEvent (componente: Scrollbar) ComponentEvent (componentes: Choice, Component) ContainerEvent (componente: Container) FocusEvent (componente: Component) ItemEvent (componentes: CheckBox, List) KeyEvent (componente: Component) MouseEvent (componente: Component) TextEvent (componente: TextComponent) WindowEvent (componente: Window) MEEC@IST Swing 47/52

Eventos (3) O objecto à espera deve implementar uma interface, que depende do tipo de evento gerado. Evento ActionEvent AdjustmentEvent ComponentEvent ContainerEvent Interface ActionListener AdjustmentListener ComponentListener ContainerListener Métodos actionperformed() adjustmentvaluechanged() componenthidden() componentmoved() componentresized() componentshown() componentadded() componentremoved() MEEC@IST Swing 48/52

Eventos (4) Um botão é uma instância de JButton. No AWT/Swing, a classe implementa a interface ActionListener, e o método actionperformed processa o evento. Botão ActionEvent obj:classe <<interface>> ActionListener +actionperformed (ActionEvent) Classe MEEC@IST Swing 49/52

Eventos (5) Forma de um objecto tratar, no Swing, um evento ActionEvent: 1. Implementar interface ActionListener class MyClass implements ActionListener { 2. Dentro da classe definir o método void actionperformed(actionevent e) { // código de reacção ao evento } } 3. Adicionar, no botão, o objecto que processa o evento void addactionlistener(actionlistener l) MEEC@IST Swing 50/52

Eventos (6) import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SwingApplication { private int numclicks = 0; private JLabel label = new JLabel("Button clicks: " + numclicks); private JButton button = new JButton("Press me!"); public SwingApplication(JPanel jp) { jp.add(label); jp.add(button); button.addactionlistener(new Handler()); } } private class Handler implements ActionListener { public void actionperformed(actionevent e) { numclicks++; label.settext("button clicks: " + numclicks); } } MEEC@IST Swing 51/52

Eventos (7) import javax.swing.*; import java.awt.*; public class Main { public static void main(string[] args) { JFrame.setDefaultLookAndFeelDecorated(true); JFrame frame = new JFrame("Counter"); frame.setdefaultcloseoperation(jframe.exit_on_close); } } JPanel p = new JPanel(); frame.setcontentpane(p); SwingApplication app = new SwingApplication(p); frame.pack(); frame.setvisible(true); MEEC@IST Swing 52/52