Processo Básico: OO + Eventos. Java First-Tier: Aplicações. Construção de Interface gráfica. Exemplo. Exemplo. Exemplo. Hierarquia de Composição

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

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

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II Java Nona aula

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

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

Aula 2 Even e to t s d o M ouse

Introdução à Programação Gráfica em Java

Interfaces Gráficas POO. Prof. Márcio Delamaro

MANIPULAÇÃO DE EVENTOS

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 4- Tratamento de Eventos em Interfaces Gráficas

Gerenciamento de Layout

Aplicação Linguagem de Programação Orientada a Objeto

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

Programação II. Cassio Diego

Abstract Window Toolkit (AWT) Peer based

Manipulando Eventos em Java

Tratamento de Eventos em Programas com GUI - Graphical User Interface. Jorge H. C. Fernandes UFRN Junho de 2001

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula de Revisão para AV1

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

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

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

Aplicações de Linguagem de Programação Orientada a Objeto

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

Gerenciadores de Layout

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

Aula 2 Eventos do Mouse by Pearson Education do Brasil

Orientação a Objetos

Exercício 1: Criar um programa que utiliza que desenha uma interface gráfica tal como descrito na Figura 1.1.

Encerrando Introdução a Objetos e Classes Redefinição de Métodos (1)

JMENU, JDESKTOPPANE E JINTERNALFRAME

Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 16, 17, e 18

Introdução Interfaces (revisão) Delegação de eventos Tratamento de eventos Classes Adaptadoras Capturando Eventos nos Componentes Swing

TRATAMENTO DE EVENTOS EM JAVA USANDO SWING. George Gomes Cabral

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

Aplicações Gráficas com AWT

COM220 Aula 17: Interface Gráfica Containers Swing

8. Interfaces Gráficas de Usuário

JAVA. Gerenciadores de Layout. Tiago Alves de Oliveira

Tiago Alves de Oliveira. Tiago Alves de Oliveira

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

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

Principais Classes Swing AWT

Elaborando as Interfaces dos trabalhos das aulas 25, 26 e 27.

Roteiro. Introdução. Uma Introdução à Programação Orientada a Objetos e JAVA usando NetBeans. Objetos. Princípios da Orientação a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

. Uma instância da classe JTextField gera uma instância da classe ActionEvent quando o objecto está activo e o utilizador pressiona a tecla ENTER.

LINGUAGEM DE PROGAMAÇÃO II Criando uma Classe

Programação Gráfica em Java Alguns Componentes javax.swing

Interfaces Gráficas com Swing. Professor Leonardo Larback

Elaborando Interfaces. Prof. André Aparecido da Silva Disponível em: Aulas 16, 17, e 18

Aula Prática Criando Views e Controles

AULA 10 - CCT0024 Linguagem de Programação Objetivos da aula. Janelas para leitura e exibição de textos

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

HABILITANDO A IDE DO ECLIPSE

Arquivos. Prof. Leonardo Barreto Campos 1

Orientação a Objetos

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

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

Vector Java. Empregado.java

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula de Revisão para AV1

MÓDULO 4 SWING Parte 3

Java First-Tier: Aplicações. Abstract Window Toolkit (AWT) Construção de Interfaces com Swing (I) Swing: Características

Programação Orientada a Objetos com Java. Prof. Júlio Machado

Java Standard Edition (JSE)

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 1- Interfaces Gráficas com Swing

Elaborando as Interfaces Aulas 31, 32 e 33

Componente JOptionPane Layout Null Tratamento de Eventos. Action Listener

Adding User Interaction

Curso Java Starter. 1

Interfaces Gráficas: Interações Complexas

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

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

Interface Gráfica. GUI (Graphic User Interface) AWT e Swing Containers e componentes Layouts. Linguagem Java - Prof. Luciana Porcher Nedel 1

Tratamento de Eventos

Introdução à Tecnologia Java 02/2012. Java Aula 02 15/08/2012. Celso Olivete Júnior.

LPII Programando uma Cálculadora Simples Módulo III

Teste de Software: Existe Isto? Jorge Fernandes Junho de 2004

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

Elaborando as Interfaces Aulas 43, 44 e 45

package br.com.cadastro.visao;

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

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

Java Deployment Course

Gerenciadores de Layouts

Modulo I Swing Básico

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

Interface Gráfica. Prof. Marcelo Cohen

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

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

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

Interface Gráfica. Disciplina: Desenvolvimento de Sistemas. Professor: Thiago Silva Prates

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

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

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Programação Orientada a Objetos

Prof. Responsáveis Wagner Santos C. de Jesus

Interface Gráfica Swing. Leonardo Gresta Paulino Murta

Aula 15 Interface Gáfica. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

Desenvolvimento de Aplicações Desktop

Transcrição:

Java First-Tier: Aplicações Construção de Interface gráfica Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Processo Básico: OO + Eventos Instanciar os componentes de interface por exemplo, janelas, botões, campos de textos, etc Adicionar os componentes em containers por exemplo, como os componentes podem ser agrupados e qual o layout de diagramação Estabelecer o tratamento de eventos de interface por exemplo, o que deve ocorrer quando o usuário clicar um botão ou como alterar o conteúdo de um componente quando um outro sofre alguma alteração 2 Exemplo 3 Exemplo public class JanelaSimples { public JanelaSimples() { /* Cria o botão */ final JButton botaolimpa = new JButton("Limpa"); /* Cria o campo de texto */ final JTextField campotexto = new JTextField(10); /* Cria uma janela */ final JFrame janela = new JFrame ("Janela Simples"); /* Adiciona os componentes na janela */ painel.add (botaolimpa); painel.add (campotexto); /* Quando o usuário clicar no botao, limpa o campo de texto */ botaolimpa.addactionlistener (new ActionListener() { public void actionperformed (ActionEvent e) { campotexto.settext(""); ); /* Exibe a janela */ 4 Hierarquia de Composição Componente qualquer elemento de interface Container é um Componente agregacomponentes Componente is-a Container 5 JButton botaolimpa Exemplo JFrame janela Container content pane JPanel painel JTextField campotexto 6 1

Elementos de Interface Swing Umajanelaé um top-level container: onde os outros componentes são desenhados. Um painel é um container intermediário: serve para facilitar o agrupamento de outros componentes. Botões e campos de texto são exemplos de componentes atômicos: elementos de interface que não agrupam outros componentes. Mostram para o usuário e/ou obtêm dele alguma informação. A API do Swing oferece muitos componentes atômicos. Alguns Componentes Atômicos Campo de Texto Label Botão CheckBox Lista Lista dropdown Canvas 7 8 Classe JComponent Superclasse de muitos elementos do Swing, Funcionalidade comum aos componentes Disponibiliza métodos para controlar: Tool tips Bordas Propriedades javax.swing.jlabel Modela um texto e/ou imagem não editável, isto é, sem interação com o usuário 9 10 Exemplo de JLabel javax.swing.jtextfield /* Cria um label com texto */ JLabel label1 = new JLabel("Label1: Apenas Texto"); Modela um campo de edição de texto de uma linha /* Cria um label com texto e imagem */ JLabel label2 = new JLabel("Label2: Imagem e texto", new ImageIcon("javalogo.gif"), JLabel.CENTER); label2.setverticaltextposition(jlabel.bottom); label2.sethorizontaltextposition(jlabel.center); 11 12 2

Exemplo de JTextField /* Cria um campo de nome */ JTextField camponome = new JTextField(10); JLabel labelnome = new JLabel ("Nome: "); labelnome.setlabelfor (camponome); labelnome.setdisplayedmnemonic('n'); // Alt-n javax.swing.jbutton Modela um push-button /* Cria um campo de email */ JTextField campoemail = new JTextField(10); JLabel labelemail = new JLabel ("Email: "); labelemail.setlabelfor (campoemail); labelemail.setdisplayedmnemonic('e'); // Alt-e 13 14 Exemplo de JButton /* Cria um botao com texto */ JButton botao1 = new JButton ("Botão Desabilitado"); botao1.setenabled(false); botao1.settooltiptext("exemplo de um botão de texto"); botao1.setmnemonic(keyevent.vk_d); // Alt-D /* Cria um botao com texto e imagem */ JButton botao2 = new JButton("Botão Habilitado", new ImageIcon("javalogo.gif")); botao2.settooltiptext("botão de texto e imagem"); botao2.setmnemonic(keyevent.vk_h); // Alt-H botao2.setpressedicon(new ImageIcon("javalogo2.gif")); Janela Diálogo Applet Alguns Containers Top Painel Scroll Pane Level Containers Containers Intermediários 15 16 javax.swing.jframe Representa uma janela do sistema nativo Possui título e borda Pode possuir menu Exemplo JFrame janela = new JFrame("Exemplo de Janela"); janela.setdefaultcloseoperation(jframe.exit_on_close); JLabel mensagem = new JLabel("Olá Mundo!"); janela.getcontentpane().add(mensagem); janela.setlocationrelativeto(null); // centraliza janela.seticonimage(new ImageIcon("javalogo2.gif").getImage()); JMenuBar menubar = new JMenuBar(); menubar.add(new JMenu("Menu")); janela.setjmenubar (menubar); janela.pack(); janela.show(); 17 18 3

javax.swing.jpanel Modela um container sem decoração. Representa um grupo de elementos Normalmente usado para estruturar a interface associado a um diagramador Diagramadores Arrumam um grupo de elementos Estão associados aos containers Diferentes estilos de arrumação como fluxo de texto orientada pelas bordas em forma de grade e outros... 19 20 java.awt.flowlayout Coloca os componentes lado a lado, uma linha após a outra Alinhamento: centralizado (default), à esquerda ou à direita Default para o JPanel Exemplo de FlowLayout Container contentpane = janela.getcontentpane(); contentpane.setlayout(new FlowLayout()); contentpane.add(new JButton("Button 1")); contentpane.add(new JButton("2")); contentpane.add(new JButton("Button 3")); contentpane.add(new JButton("Long-Named Button 4")); contentpane.add(new JButton("Button 5")); 21 22 java.awt.borderlayout Divide o container em 5 áreas: norte, sul, leste, oeste e centro Default para content pane do JFrame Exemplo de BorderLayout Container contentpane = janela.getcontentpane(); //contentpane.setlayout(new BorderLayout()); // Desnecessário contentpane.add(new JButton("Button 1 (NORTH)"), BorderLayout.NORTH); contentpane.add(new JButton("2 (CENTER)"), BorderLayout.CENTER); contentpane.add(new JButton("Button 3 (WEST)"), BorderLayout.WEST); contentpane.add(new JButton("Long-Named Button 4 (SOUTH)"), BorderLayout.SOUTH); contentpane.add(new JButton("Button 5 (EAST)"), BorderLayout.EAST); 23 24 4

java.awt.gridlayout Células do mesmo tamanho especificadas pelo número de linhas e colunas Exemplo de GridLayout Container contentpane = janela.getcontentpane(); contentpane.setlayout(new GridLayout(0,2)); contentpane.add(new JButton("Button 1")); contentpane.add(new JButton("2")); contentpane.add(new JButton("Button 3")); contentpane.add(new JButton("Long-Named Button 4")); contentpane.add(new JButton("Button 5")); 25 26 Orientação por Eventos Orientação por Eventos 27 Um modelo de programação que tornou-se bastante difundido com o uso de interfaces gráficas foi a programação orientada por eventos. Segundo esse modelo, o programa deixa de ter o controle do fluxo de execução, que passa a um sistema encarregado de gerenciar a interface. Assim, o programa passa a ser chamado pelo sistema quando algum evento é gerado na interface. 28 Mecanismos de Callback Callbacks OO? Para que o programa possa ser chamado pelo sistema, ele deve registrar uma função para cada evento de interface que ele desejar tratar. Tais funções são chamadas de callbacks por serem chamadas de volta pelo sistema. Esse modelo é ortogonal ao modelo de orientação por objetos. É perfeitamente possível projetar um sistema OO que use o modelo de orientação por eventos para tratar eventos de interface, comunicações, etc. Porém, temos um problema: uma linguagem puramente OO não possui o conceito de função. Como resolver então? 29 30 5

Objeto Callback A solução é utilizar um objeto que faça o papel de callback. Ou seja, onde registraríamos uma função, passamos a registrar um objeto. Assim, quando o sistema precisar executar a callback, ele deverá executar um determinado método do objeto. Esse método, então, fará o tratamento do evento. Callbacks em Java Como Java é uma linguagem OO na qual não existe o conceito de função, callbacks devem ser implementadas através de objetos Um objeto que implementa uma callback em Java é chamado de listener 31 32 Listeners & Eventos Os listeners fazem o papel das callbacks. Listeners são definidos por interfaces e podem estar aptos a tratar mais de um tipo de evento. Quando um listener tem um de seus métodos chamados, ele recebe um parâmetro que descreve o evento ocorrido. Esse parâmetro é um objeto: existem classes para modelar diferentes grupos de eventos. Listeners Definem interfaces que representam um grupo de callbacks São registrados junto aos componentes Exemplo: java.awt.event.mouselistener public abstract void mouseclicked(mouseevent e) public abstract void mousepressed(mouseevent e) public abstract void mousereleased(mouseevent e) public abstract void mouseentered(mouseevent e) public abstract void mouseexited(mouseevent e) 33 34 ActionListener Modela a callback de um evento do tipo ActionEvent. public abstract void actionperformed (ActionEvent e) WindowListener Modela a callback de um evento do tipo WindowEvent. Essa interface declara um método para cada evento do grupo public abstract void windowopened(windowevent e) public abstract void windowclosing(windowevent e) public abstract void windowclosed(windowevent e) public abstract void windowiconified(windowevent e) public abstract void windowdeiconified(windowevent e) public abstract void windowactivated(windowevent e) public abstract void windowdeactivated(windowevent e) 35 36 6

Eventos Trazem informações sobre o evento ocorrido São passados aos listeners (callbacks) Exemplo: java.awt.event.mouseevent public int getx() public int gety() public int getclickcount() ActionEvent Modela o evento que representa uma ação executada sobre um componente. O significado depende do componente. Exemplos: botão pressionado entrada de texto finalizada 37 38 WindowEvent Modela os eventos que podem ocorrer em uma janela. Essa classe declara constantes que identificam os diversos eventos public static final int WINDOW_OPENED public static final int WINDOW_CLOSING public static final int WINDOW_CLOSED public static final int WINDOW_ICONIFIED public static final int WINDOW_DEICONIFIED public static final int WINDOW_ACTIVATED public static final int WINDOW_DEACTIVATED Implementando um Listener Define a classe que implementa a interface do Listener class MeuListener implements ActionListener { System.out.println("Botão pressionado"); public Window getwindow() 39 40 Registrando um Listener Cria o objeto de callback e o registra no componente button.addactionlistener(new MeuListener()); Implementando um Listener de Janela Para criarmos um listener para um evento de janela devemos criar uma classe que implemente a interface WindowListener. Nessa classe, codificaremos, então, o método correspondente ao evento que desejamos tratar. Porém, não podemos implementar uma interface e deixar de codificar algum método. Assim, precisaremos implementar todos os sete métodos definidos. 41 42 7

Implementando um Listener de Janela class MeuListener implements WindowListener { public void windowopened(windowevent e) { public void windowclosing(windowevent e) { System.out.println("Janela sendo fechada"); public void windowclosed(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e){ public void windowactivated(windowevent e){ public void windowdeactivated(windowevent e) { Adaptadores No caso anterior, seis implementações seriam vazias pois só desejávamos responder a um único evento. Como essa é uma situação comum, o pacote event define adaptadores para todas as interfaces de listeners que têm mais de um método. Um adaptador é uma classe que implementa o listener e dá implementações vazias para todos os métodos. 43 44 Adaptadores Uso de local inner classes class MeuListener extends WindowAdapter { public void windowclosing(windowevent e) { System.out.println("Janela sendo fechada"); Classe que implementa a interface pode ser: aninhada dinamicamente local ao método que faz o registro do listener anônima button.addactionlistener(new ActionListener() { System.out.println("Botão pressionado"); ); 45 46 Exemplo I public class Janela1 { JButton botaolimpa; JTextField campotexto; JFrame janela; public Janela1() { botaolimpa = new JButton("Limpa"); campotexto = new JTextField(10); janela = new JFrame ("Exemplo 1 de Listener"); janela.setdefaultcloseoperation(jframe.exit_on_close);; painel.add (botaolimpa); painel.add (campotexto); botaolimpa.addactionlistener (new LimpaCampoListener(campoTexto)); public static void main(string[] args) { new Janela1(); class LimpaCampoListener implements ActionListener { JTextField campo; LimpaCampoListener(JTextField campo) { this.campo = campo; campo.settext(""); 47 public class Janela2 { Exemplo II JButton botaolimpa; JTextField campotexto; JFrame janela; private class LimpaCampoListener implements ActionListener { campotexto.settext(""); public Janela2() { botaolimpa = new JButton("Limpa"); campotexto = new JTextField(10); janela = new JFrame ("Exemplo 2 de Listener"); janela.setdefaultcloseoperation(jframe.exit_on_close);; painel.add (botaolimpa); painel.add (campotexto); botaolimpa.addactionlistener (new LimpaCampoListener()); public static void main(string[] args) { new Janela2(); 48 8

public class Janela3 { Exemplo III JButton botaolimpa; JTextField campotexto; JFrame janela; public Janela3() { botaolimpa = new JButton("Limpa"); campotexto = new JTextField(10); janela = new JFrame ("Exemplo 3 de Listener"); janela.setdefaultcloseoperation(jframe.exit_on_close);; painel.add (botaolimpa); painel.add (campotexto); botaolimpa.addactionlistener (new ActionListener() { campotexto.settext(""); ); public static void main(string[] args) { new Janela3(); 49 Exemplo IV public class Janela4 { public Janela4() { JButton botaolimpa = new JButton("Limpa"); final JTextField campotexto = new JTextField(10); JFrame janela = new JFrame ("Exemplo 4 de Listener"); janela.setdefaultcloseoperation(jframe.exit_on_close);; painel.add (botaolimpa); painel.add (campotexto); botaolimpa.addactionlistener (new ActionListener() { campotexto.settext(""); ); public static void main(string[] args) { new Janela4(); 50 9