COMPONENTES GUI captulo 11 Deitel Roberto Willrich INECTCUFSC
COMPONENTES GUI (capítulo 11 Deitel) Roberto Willrich INE-CTC-UFSC Carla Merkle Westphall INE-CTC-UFSC E-Mail: carlamw@inf. ufsc. br URL: http: //moodle. inf. ufsc. br INE 5605 -Turma 0238 A
2 Objetivos Neste capítulo aprenderemos: § Construir interfaces gráficas e tratar eventos gerados pelas interações do usuário. § Entender os pacotes contendo componentes GUI, classes de tratamento de eventos e interfaces. § Criar e manipular botões, labels, listas, campos de texto e painéis. § Tratar eventos de manipulação do mouse e de teclado. § Usar o layout managers para organizar os componentes GUI 2005 Pearson Education, Inc. All rights reserved.
3 Introdução • Interfaces gráficas (GUI) – Oferecem um mecanismo amigável de interação com as aplicações – Normalmente contém barra de título, barra de menu contendo menus, botões e campos de texto – Construídos a partir de componentes GUI 2005 Pearson Education, Inc. All rights reserved.
4 Botão Menus Barra de título Barra de menus Campo de texto Barras de rolagem Internet Explorer componentes GUI. 2005 Pearson Education, Inc. All rights reserved.
Entrada/Saída Simples Baseada em GUI com. JOption. Pane 5 • Caixas de diálogo – Usada pelas aplicações para interagir com o usuário – Oferecida pela classe Java JOption. Pane • Contém diálogos de entrada e de mensagem 2005 Pearson Education, Inc. All rights reserved.
6 Resumo Mostra caixa de entrada para receber o primeiro inteiro Adicao. java (1 de 2) Mostra caixa de entrada para receber o segundo inteiro Mostra caixa de mensagem para apresentar a soma ao usuário 2005 Pearson Education, Inc. All rights reserved.
Caixa de Dialogo: Caixa de Mensagem 7 • Classe JOption. Pane – Método JOption. Pane. show. Message. Dialog • Argumentos – Primeiro usado para posicionamento na tela • Null para colocar a caixa no centro da tela do frame default – Segundo é a String a apresentar – Terceiro é o titulo da janela – Quarto é o tipo de mensagem // Imprime linhas na caixa de dialogo import javax. swing. JOption. Pane; // importa classe JOption. Pane public class Dialog 2 { public static void main( String args[] ) { // apresenta um dialogo com a mensagem JOption. Pane. show. Message. Dialog( null, "Bem vindonan. Java" , "Titulo", JOption. Pane. INFORMATION_MESSAGE); } } 2005 Pearson Education, Inc. All rights reserved.
8 Caixas de diálogos apresentadas pelas linhas 10– 11 Prompt para o usuário Campo de texto em que o usuário digita um valor Quando o usuário clica em OK, show. Input. Dialog retorna para o programa o 2 digitado pelo usuário como uma String. O programa deve converter o String para um int Adicao. java (2 de 2) Caixa de entrada apresentada pelas linhas 12– 13 Barra de titulo Caixa de mensagem apresentada pelas linhas 22– 23 Quando o usuário clica em OK, a caixa de mensagem desaparece 2005 Pearson Education, Inc. All rights reserved.
9 Constantes static JOption. Pane para caixas de dialogo. 2005 Pearson Education, Inc. All rights reserved.
10 Visão Geral dos Componentes Swing • Componentes GUI Swing – Declarados no pacote javax. swing – Muitos deles são componentes Java puros – Parte das Java Foundation Classes (JFC) • É um framework gráfico para construir interfaces gráficas (GUIs) portáveis baseadas em Java. JFC consiste do AWT (Abstract Window Toolkit), Swing e Java 2 D. Juntos, eles oferecem uma interface gráfica para programas em Java que rodam em plataformas populares como Microsoft Windows, Linux, e Mac OSX. 2005 Pearson Education, Inc. All rights reserved.
11 Alguns componentes gráficos básicos. 2005 Pearson Education, Inc. All rights reserved.
12 Swing vs. AWT • Abstract Window Toolkit (AWT) – Precursor do Swing – Declarado no pacote java. awt – Não oferece uma apresentação multi-plataforma consistente 2005 Pearson Education, Inc. All rights reserved.
13 Tópico de portabilidade Componentes Swing são implementados em Java, assim elas são mais portáveis e flexíveis que os componentes GUI Java do pacote java. awt, que foram baseadas nos componentes GUI da plataforma de base. Por esta razão, componentes Swing são geralmente preferidos. 2005 Pearson Education, Inc. All rights reserved.
14 Componentes GUI Leves vs. Pesados • Componentes leves – Não depende diretamente de componentes GUI suportados pela plataforma de base • Componentes pesados – Dependentes diretamente da plataforma local (S. O. ) – Componentes AWT – Alguns componentes Swing 2005 Pearson Education, Inc. All rights reserved.
15 Observação A forma de apresentação da interface definida por componentes GUI pesados a partir do pacote java. awt varia de acordo com a plataforma. Como componentes pesados são ligados a GUI da plataforma local, a forma de apresentação varia de plataforma para plataforma. 2005 Pearson Education, Inc. All rights reserved.
Superclasses dos componentes GUI leves do Swing 16 • Classe Component (pacote java. awt) – Subclasse de Object – Declara muitos comportamentos e atributos comuns aos componentes GUI • Classe Container (pacote java. awt) – Subclasse de Component – Organiza Components • Classe JComponent (pacote javax. swing) – Subclasse de Container – Superclasse de todos os componentes Swing leves 2005 Pearson Education, Inc. All rights reserved.
q Apresentação de Textos e Imagens em uma Janela 17 • Classe JFrame – Muitas janelas são instancias ou subclasse desta classe – Oferece uma barra de título – Oferece botões para minimizar, maximizar ou fechar a aplicação 2005 Pearson Education, Inc. All rights reserved.
18 Nomeando componentes GUI • Label – Instruções ou informações textuais indicando o propósito de cada componentes – Criado com a classe JLabel 2005 Pearson Education, Inc. All rights reserved.
19 Especificando o Layout • Containers de layout (Layout Containers) – Determina onde os componentes são colocados no container – Feito em Java com gerenciadores de layout (layout managers) • Uma destas classes é Flow. Layout – Configurado com o método set. Layout da classe JFrame 2005 Pearson Education, Inc. All rights reserved.
20 Resumo Label. Frame. java (1 de 2) 2005 Pearson Education, Inc. All rights reserved.
21 Resumo Label. Frame. java (2 de 2) 2005 Pearson Education, Inc. All rights reserved.
22 Resumo Teste. Label. java 2005 Pearson Education, Inc. All rights reserved.
23 Criando e anexando label 1 • Construtor tendo como argumento o texto • Método set. Tool. Tip. Text da classe JComponent – Especifica o texto de ajuda (tool tip) • Método add da classe Container – Adiciona um componente em um container label 1 = new JLabel( "Label com texto" ); label 1. set. Tool. Tip. Text( "Este é o label 1" ); add( label 1 ); // adiciona label 1 ao JFrame 2005 Pearson Education, Inc. All rights reserved.
24 Observação Use tool tips para adicionar um texto descritivo nos seus componentes gráficos. Este texto ajuda o usuário na determinação dos objetivos dos componentes da interface. 2005 Pearson Education, Inc. All rights reserved.
25 Erro comum de programação Se você esquece de adicionar um componente no container, este componente não será apresentado quando o container aparecer na tela. 2005 Pearson Education, Inc. All rights reserved.
26 Criando e Anexando label 2 • Texto, ícone e posicionamento são passados no construtor de JLabel – Interface Icon: • Pequena imagem de tamanho fixo • Icon. Image é uma implementação da interface Icon que apresenta ícones a partir de Images – Images são criadas a partir de URL, nome do arquivo ou array de bytes pré-carregados com Media. Tracker – No exemplo é passado o URL (get. Class(). get. Ressource()) Icon bug = new Image. Icon( get. Class(). get. Resource( "bug 1. gif" ) ); label 2 = new JLabel( "Label com texto e icone", bug, Swing. Constants. LEFT ); label 2. set. Tool. Tip. Text( "Este é label 2" ); add( label 2 ); // adiciona label 2 ao JFrame 2005 Pearson Education, Inc. All rights reserved.
27 Criando e Anexando label 3 • Construtor default e uso de métodos JLabel – get. Text e set. Text • Para definir e recuperar o texto de um label – get. Icon e set. Icon • Para definir e recuperar o ícone apresentado no label – get. Horizontal. Text. Position e set. Horizontal. Text. Position • Para definir e recuperar a posição horizontal do texto apresentado no label 3 = new JLabel(); // construtor JLabel sem argumentos label 3. set. Text( "Label com icone e texto no botão " ); label 3. set. Icon( bug ); // adiciona icone ao JLabel label 3. set. Horizontal. Text. Position( Swing. Constants. CENTER ); label 3. set. Vertical. Text. Position( Swing. Constants. BOTTOM ); label 3. set. Tool. Tip. Text( "Este é label 3" ); add( label 3 ); // adiciona label 3 ao JFrame 2005 Pearson Education, Inc. All rights reserved.
28 Criando e Anexando label 2 • Interface Swing. Constants – Declara um conjunto de constantes inteiras comuns tal como aquela usada para definir o alinhamento dos componentes – Pode ser usada com métodos set. Horizontal. Alignment e set. Vertical. Alignment 2005 Pearson Education, Inc. All rights reserved.
29 Alguns componentes GUI básicos 2005 Pearson Education, Inc. All rights reserved.
Criando e Apresentando a janela Label. Frame 30 • Outros métodos JFrame – set. Default. Close. Operation • Indica como a aplicação reage quando o usuário clica no botão fechar – set. Size • Especifica a altura e largura da janela – set. Visible • Determina se a janela é apresentada (true) ou não (false) public static void main( String args[] ) { Label. Frame label. Frame = new Label. Frame(); // cria Label. Frame label. Frame. set. Default. Close. Operation( JFrame. EXIT_ON_CLOSE ); label. Frame. set. Size( 275, 180 ); // define tamanho do frame label. Frame. set. Visible( true ); // apresenta frame } // fim do main 2005 Pearson Education, Inc. All rights reserved.
q Campos de texto e uma introdução a tratamento de eventos com classes aninhadas 31 • GUIs são orientadas a eventos – Uma interação do usuário cria um evento • Eventos comuns são clicar um botão, digitar em um campo de texto, selecionar um item em um menu, fechar uma janela, mover o mouse, etc. – O evento causa uma chamada a um método chamado de tratador de eventos (event handler) 2005 Pearson Education, Inc. All rights reserved.
Campos de texto e uma introdução a tratamento de eventos com classes aninhadas 32 • Classe JText. Component – Superclasse de JText. Field • Superclasse de JPassword. Field – Adiciona o caractere echo para esconder a entrada de texto no componente 2005 Pearson Education, Inc. All rights reserved.
33 Resumo Frame. Campo. De Texto. java (1 de 3) Cria um novo JText. Field 2005 Pearson Education, Inc. All rights reserved.
Resumo 34 Cria um novo JText. Field Frame. Campo. De Texto. java Cria um novo JText. Field não (2 de 3) editável Cria um novo JPassword. Field Criar tratador de evento Registra tratador de evento Cria uma classe tratador de evento pela implementação da interface Action. Listener Declara método action. Performed 2005 Pearson Education, Inc. All rights reserved.
Outline 35 Testa se a fonte do evento é o primeiro campo de texto Obtém texto do campo de texto Frame. Campo. De Testa se a fonte do evento. Texto. java éo segundo campo de texto (3 de 3) Obtém texto do campo de texto Testa se a fonte do evento é o terceiro campo de texto Obtém texto do campo de texto Testa se a fonte do evento é o campo password Obtém password do campo password 2005 Pearson Education, Inc. All rights reserved.
36 Outline Teste. Campo. De Texto. java (1 de 2) 2005 Pearson Education, Inc. All rights reserved.
37 Resumo Teste. Campo. De Texto. java (2 de 2) 2005 Pearson Education, Inc. All rights reserved.
Passos necessários para configurar um tratador de eventos para um componente gráfico 38 • Vários passos são necessários para uma aplicação responder eventos – Criar uma classe para um tratador de evento • Implementa uma interface event-listener apropriada – Registrar o tratador de eventos Tratador. Campo. De. Texto tratador = new Tratador. Campo. De. Texto(); campo. De. Texto 1. add. Action. Listener( tratador ); //. . . private class Tratador. Campo. De. Texto implements Action. Listener { // processa eventos no campo de texto public void action. Performed( Action. Event event ) { //. . . } } 2005 Pearson Education, Inc. All rights reserved.
Usando uma classe aninhada para implementar um tratador de eventos 39 • Classe de alto-nível (classe externa) – Não declarada dentro de outra classe • Classes aninhada – Declarada dentro de outra classe – Classes aninhadas não-static são chamadas classes internas • Com freqüência usadas para tratamento de eventos public class Frame. Campo. De. Texto extends JFrame { //. . . private class Tratador. Campo. De. Texto implements Action. Listener { //. . . } } 2005 Pearson Education, Inc. All rights reserved.
40 Observação Um classe interna pode acessar diretamente os atributos e métodos da classe externa, mesmo se eles são private. 2005 Pearson Education, Inc. All rights reserved.
Usando uma classe aninhada para implementar um tratador de eventos 41 • JText. Fields e JPassword. Fields – Digitando “enter” dentro destes campos causa um Action. Event • Processado pelos objetos que implementam a interface Action. Listener 2005 Pearson Education, Inc. All rights reserved.
Registrando o tratador de eventos para cada campo de texto 42 • Registrando um tratador de evento – Chamando método add. Action. Listener para registrar um objeto Action. Listener – Action. Listener observa eventos no objeto Tratador. Campo. De. Texto tratador = new Tratador. Campo. De. Texto(); campo. De. Texto 1. add. Action. Listener( tratador ); 2005 Pearson Education, Inc. All rights reserved.
43 Erro comum de programação Esquecer de registrar um objeto tratador de evento para tratar um evento particular de componente gráfico faz com que os eventos sejam ignorados. 2005 Pearson Education, Inc. All rights reserved.
Detalhes do método action. Performed da classe Tratador. Campo. De. Texto 44 • Fonte do evento – Componente na qual o evento foi originado – Pode ser determinada usando o método get. Source – Texto de um JText. Field pode ser obtido usando get. Action. Command – Texto de um JPassword. Field pode ser obtido usando get. Password (retorna um char[]) private class Tratador. Campo. De. Texto implements Action. Listener { // processa eventos no campo de texto public void action. Performed( Action. Event event ) { String string = ""; // declara string a apresentar // usuario clicou Enter no JText. Field campo. De. Texto 1 if ( event. get. Source() == campo. De. Texto 1 ) string = String. format( "campo. De. Texto 1: %s", event. get. Action. Command() ); 2005 Pearson Education, Inc. All rights reserved.
q Tipos de eventos gráficos comuns e interfaces Listener 45 • Tipos de eventos – Todos são subclasses de AWTEvent – Alguns declarados no pacote java. awt. event – Aqueles específicos dos componentes Swing são declarados em javax. swing. event • Modelo de evento de delegação: – A origem do evento é o componente com o qual o usuário interage. – O objeto do evento é criado e contém as informações sobre o evento que aconteceu. – O ouvinte de evento é notificado quando um evento acontece. 2005 Pearson Education, Inc. All rights reserved.
46 Algumas classes de evento do pacote java. awt. event. 2005 Pearson Education, Inc. All rights reserved.
47 Algumas interfaces comuns do pacote java. awt. event. 2005 Pearson Education, Inc. All rights reserved.
48 Invocação do tratamento de evento • Eventos são notificados para apenas um tratador de evento que casa com o tipo de evento – Eventos tem um único event ID especificando o tipo de evento • Action. Events são manipulados pelos Action. Listeners • Mouse. Events são manipulados pelos Mouse. Listeners e Mouse. Motions. Listeners • Key. Events são manipulados por Key. Listeners 2005 Pearson Education, Inc. All rights reserved.
49 Tratamento de evento • Perguntas remanescentes: – Como o handler de evento ficou registrado? – Como o componente GUI sabe chamar action. Performed em vez de algum outro método de tratamento de evento? • Cada JComponent tem uma variável de instância listener. List: – Objeto do tipo Event. Listener. List. – Mantém referências a todos os seus ouvintes registrados. 2005 Pearson Education, Inc. All rights reserved.
Registro de evento para JText. Field text. Field 1 50 2005 Pearson Education, Inc. All rights reserved.
51 q JButton • Botão – Componente que o usuário clica para lançar uma ação específica – Pode ser botões de comando, caixas de marcação (check box), botões de alternância e botões de opção – Tipos de botões são subclasses de Abstract. Button 2005 Pearson Education, Inc. All rights reserved.
52 Hierarquia do Botão Swing. 2005 Pearson Education, Inc. All rights reserved.
53 q JButton • Botões de comando – Criado com a classe JButton – Texto na face do botão é chamado de rótulo (label) do botão – Gera um Action. Event quando ele é clicado 2005 Pearson Education, Inc. All rights reserved.
54 Resumo Frame. Botao. java (1 de 2) Declara dois atributos JButton Cria novo JButton Cria dois Image. Icons Cria novo JButton Define rollover icon para JButton 2005 Pearson Education, Inc. All rights reserved.
55 Resumo Cria tratador para botões Frame. Botao. java (2 de 2) Registra tratador de eventos Classe interna implementa Action. Listener Acesso a atributo da classe externa usando a referência this Obtém texto do JButton clicado 2005 Pearson Education, Inc. All rights reserved.
56 Resumo Teste. Botao. java (1 de 1) 2005 Pearson Education, Inc. All rights reserved.
57 q JButton • JButtons pode ter um ícone de alternância (rollover icon) – Aparece quando o mouse é posicionado sobre o botão – Adicionado ao JButton com o método set. Rollover. Icon bug 1 = new Image. Icon( get. Class(). get. Resource( "bug 1. gif" ) ); Icon bug 2 = new Image. Icon( get. Class(). get. Resource( "bug 2. gif" ) ); fancy. JButton = new JButton( "Fancy Button", bug 1 ); // set image fancy. JButton. set. Rollover. Icon( bug 2 ); // set rollover image add( fancy. JButton ); // adiciona fancy. JButton ao JFrame 2005 Pearson Education, Inc. All rights reserved.
58 Observação Quando usado na classe interna, a palavra-chave this referencia o objeto da classe interna atualmente sendo manipulado. Um método da classe interna pode acessar o objeto da classe externa precedendo o this do nome da classe externa e um ponto, como em Frame. Botao. this. 2005 Pearson Education, Inc. All rights reserved.
59 q Botões que mantém um estado • Botões com estado – Swing contém três tipos de botões com estado – JToggle. Button, JCheck. Box and JRadio. Button – JCheck. Box e JRadio. Button são subclasses de JToggle. Button 2005 Pearson Education, Inc. All rights reserved.
60 q JCheck. Box • JCheck. Box – Contém um rótulo que aparece na direita do check box por default – Gera um Item. Event quando este é clicado • Item. Events são tratados por Item. Listener • Passado para o método item. State. Changed – Método is. Selected retorna se o check box é selecionado (true) ou não (false) 2005 Pearson Education, Inc. All rights reserved.
61 Outline Check. Box. Frame. java (1 de 3) Declara dois atributos JCheck. Box Define fonte do campo de texto 2005 Pearson Education, Inc. All rights reserved.
62 Outline Cria dois JCheck. Boxes Check. Box. Frame Cria event handler. java (2 de 3) Registra event handler nos JCheck. Boxes Classe interna implementando Item. Listener Método item. State. Changed é chamado quando um JCheck. Box é clicado Testa se JCheck. Box é selecionado 2005 Pearson Education, Inc. All rights reserved.
Outline 63 Testa fonte do evento Método is. Selected retorna se Check. Box. Frame JCheck. Box está selecionado. java (3 de 3) 2005 Pearson Education, Inc. All rights reserved.
64 Outline Check. Box. Test. java 2005 Pearson Education, Inc. All rights reserved.
65 q JRadio. Button • JRadio. Button – Tem dois estados – selecionado e não-selecionado – Normalmente aparece no grupo na qual apenas um botão pode ser selecionado por vez • Grupo mantido por um objeto Button. Group – Declara método add para adicionar um JRadio. Button ao grupo – Usualmente representa opções múltiplas exclusivas 2005 Pearson Education, Inc. All rights reserved.
66 Erro de programação comum Adicionar um objeto Button. Group (ou um objeto de qualquer classe que não seja derivado de Component) ao container resulta em um erro de compilação. 2005 Pearson Education, Inc. All rights reserved.
67 Outline Radio. Button Frame. java (1 de 3) Declara quatro JRadio. Buttons e um Button. Group para gerenciar eles 2005 Pearson Education, Inc. All rights reserved.
68 Outline Radio. Button Frame. java (2 de 3) Cria quatro JRadio. Buttons Cria o Button. Group Adiciona cada JRadio. Button ao Button. Group 2005 Pearson Education, Inc. All rights reserved.
Outline 69 Registra um event handler a cada JRadio. Button Frame. java (3 of 3) Classe interna Event handler implementa Item. Listener Quando radio button é selecionado, a fonte do campo de texto será alterada para o valor passa text field’s font will be set to the value passed to the constructor 2005 Pearson Education, Inc. All rights reserved.
70 Outline Radio. Button. Test. java 2005 Pearson Education, Inc. All rights reserved.
q JCombo. Box e o uso de classe interna anônima para tratamento de eventos 71 • Combo box – Implementada pela classe JCombo. Box – Cada item na lista tem um índice – set. Maximum. Row. Count define o número máximo de linhas mostrada por vez – JCombo. Box oferece uma barra de rolagem e setas cima e baixo para se navegar na lista 2005 Pearson Education, Inc. All rights reserved.
Usando uma classe interna anônima para tratamento de eventos 72 • Classe interna anônima – – Forma especial de classe interna Declarada sem um nome Normalmente aparece dentro de um método Tem um acesso limitado às variáveis locais 2005 Pearson Education, Inc. All rights reserved.
73 Outline Combo. Box. Frame. java (1 of 2) Declara um atributo JCombo. Box 2005 Pearson Education, Inc. All rights reserved.
Outline Cria JCombo. Box e define número máximo de linhas 74 Cria classe interna anônima como Combo. Box. Frame event handler. java Declara método (2 of 2) item. State. Changed Testa alteração de estado do JCombo. Box Método get. Selected. Index localiza item selecionado 2005 Pearson Education, Inc. All rights reserved.
75 Outline Combo. Box. Test. java Barra de rolagem para visualizar itens na lista Setas de rolagem Caixa de rolagem 2005 Pearson Education, Inc. All rights reserved.
76 Observação Uma classe interna anônima declarada em um método pode acessar atributos e métodos do objeto da classe externa que declara ela, tão bem quanto variáveis locais final do método, mas não podem acessar variáveis não-final do método. 2005 Pearson Education, Inc. All rights reserved.
77 q JList • Lista – Apresenta uma série de itens na qual pode-se selecionar um ou mais itens – Implementada pela classe JList – Permite uma lista de seleção simples ou múltipla – Um List. Selection. Event ocorre quando um item é selecionado • Tratado por um List. Selection. Listener e passado ao método value. Changed 2005 Pearson Education, Inc. All rights reserved.
78 Outline List. Frame. java (1 of 2) Declara um atributo JList 2005 Pearson Education, Inc. All rights reserved.
Outline 79 Cria JList. Frame. java Define modo de seleção do JList (2 de 2) Adiciona JList ao Scroll. Pane e o adiciona à aplicação Obtém índice do item selecionado 2005 Pearson Education, Inc. All rights reserved.
80 Outline List. Test. java 2005 Pearson Education, Inc. All rights reserved.
81 Lista de seleção múltipla • Lista de seleção múltipla – Permite aos usuários selecionarem vários itens – Seleção de intervalo simples permite apenas um faixa contínua de itens – Seleção de intervalo múltiplos permite qualquer conjunto seja selecionado 2005 Pearson Education, Inc. All rights reserved.
82 Outline Multiple Selection. Frame. java (1 de 3) 2005 Pearson Education, Inc. All rights reserved.
83 Outline Usa uma lista de seleção de intervalo múltiplo Multiple Selection. Frame. java (2 de 3) Usa método set. List. Data e get. Selected. Values para copiar de uma JList para a outra 2005 Pearson Education, Inc. All rights reserved.
Outline 84 Define largura Multiple Define altura Selection. Frame. java (3 de 3) Define modo de seleção para seleção de intervalo simples 2005 Pearson Education, Inc. All rights reserved.
85 Outline Multiple Selection. Test. java 2005 Pearson Education, Inc. All rights reserved.
86 Tratamento de evento de mouse • Eventos de mouse: – Cria um objeto Mouse. Event. – Tratado por Mouse. Listeners e Mouse. Motion. Listeners. – Mouse. Input. Listener combina as duas interfaces. – A interface Mouse. Wheel. Listener declara o método mouse. Wheel. Moved para tratar Mouse. Wheel. Events. 2005 by Pearson Education do Brasil
87 Métodos de interface Mouse. Listener e Mouse. Motion. Listener. (Parte 1 de 2. ) 2005 by Pearson Education do Brasil
88 Métodos de interface Mouse. Listener e Mouse. Motion. Listener. (Parte 2 de 2. ) 2005 by Pearson Education do Brasil
Resumo 89 Mouse. Tracker Frame. java (1 de 4) Cria JPanel para capturar eventos de mouse Configura o fundo como branco Cria JLabel e o adiciona à aplicação 2005 by Pearson Education do Brasil
Resumo 90 Cria handler de evento para eventos de mouse Registra um handler de evento Mouse. Tracker Frame. java Implementa interfaces ouvintes de mouse (2 de 4) Declara o método mouse. Clicked Determina a localização do clique de mouse Declara o método mouse. Pressed Declara o método mouse. Released 2005 by Pearson Education do Brasil
Resumo Declara o método mouse. Entered 91 Mouse. Tracker Frame. java Configura o segundo plano de JPanel (3 de 4) Declara o método mouse. Exited Configura o segundo plano de JPanel 2005 by Pearson Education do Brasil
Resumo Declara o método mouse. Dragged 92 Mouse. Tracker Frame. java (4 de 4) Declara o método mouse. Moved 2005 by Pearson Education do Brasil
Resumo 93 Mouse. Tracker Frame. java (1 de 2) 2005 by Pearson Education do Brasil
94 Classes adaptadoras • Classe adaptadora: – Implementa interface ouvinte de evento. – Fornece implementação-padrão (corpo do método vazio) para todos os métodos de tratamento de eventos. 2005 by Pearson Education do Brasil
95 Observação de engenharia de software Quando uma classe implementa uma interface, a classe tem um relacionamento ‘é um’ com essa interface. Todas as subclasses diretas e indiretas dessa classe herdam essa interface. Portanto, um objeto de uma classe que estende uma classe adaptadora de evento é um objeto do tipo ouvinte de eventos correspondente (por exemplo, um objeto de uma subclasse de Mouse. Adapter é um Mouse. Listener). 2005 by Pearson Education do Brasil
96 Herdando Mouse. Adapter • Mouse. Adapter: – Classe adaptadora para as interfaces Mouse. Listener e Mouse. Motion. Listener. – Estender a classe permite sobrescrever somente os métodos que você deseja utilizar. 2005 by Pearson Education do Brasil
97 Erro comum de programação Se você estender uma classe adaptadora e digitar incorretamente o nome do método que você está sobrescrevendo, o método simplesmente tornase outro método na classe. Esse é um erro de lógica difícil de ser detectado, visto que o programa chamará a versão vazia do método herdado da classe adaptadora. 2005 by Pearson Education do Brasil
98 Classes adaptadoras de evento e as interfaces que elas implementam no pacote java. awt. event. 2005 by Pearson Education do Brasil
Resumo 99 Mouse. Details Frame. java (1 de 2) Registra um handler de evento 2005 by Pearson Education do Brasil
Resumo 100 Mouse. Details Frame. java (2 de 2) Obtém o número de vezes que o botão do mouse foi clicado Testa se o botão direito do mouse foi clicado Testa se o botão do meio do mouse foi clicado 2005 by Pearson Education do Brasil
Resumo 101 Mouse. Details. java (1 de 2) 2005 by Pearson Education do Brasil
Tabela de Tratamento de Eventos Origem Evento Listener JText. Field JPassword. Field Jbutton Action. Event Action. Listener action. Performed(Action. Event e) JCheck. Box JRadio. Button Item. Event Item. Listener item. State. Changed(Item. Event e) JList. Section. Event List. Selection. Listener value. Changed(List. Selection Event e) Subclasses de java. awt. Compone nt Mouse. Event Mouse. Listener mouse. Clicked(Mouse. Event e) mouse. Pressed(Mouse. Event e) mouse. Released(Mouse. Event e) mouse. Entered(Mouse. Event e) mouse. Exited(Mouse. Event e) Subclasses de java. awt. Compone nt Mouse. Motion. Event Mouse. Motion. Listener mouse. Dragged(Mouse. Event e) mouse. Moved(Mouse. Event e) Subclasses de java. awt. Compone nt Key. Event Key. Listener key. Typed(Key. Event e) key. Pressed(Key. Event e) 102
Tabela de Tratamento de Eventos Origem Evento Listener Subclasses de java. awt. window Window. Event Window. Listener window. Activated(Window. Event e) window. Closing(Window. Event e) window. Deactivated(Window. Event e) window. Deiconified(Window. Event e) window. Iconified(Window. Event e) window. Opened(Window. Event e) Subclasses de java. awt. Compon ent Focus. Event Focus. Listener focus. Gained(Focus. Event e) focus. Lost(Focus. Event e) JScroll. Bar Adjustment. Even t Adjustment. Listener adjustment. Value. Changed( Adjustment. Eve nt e) JMenu. Event Menu. Listener menu. Canceled(Menu. Event e) menu. Deselected(Menu. Event e) menu. Selected(Menu. Event e) 103
104 Gerenciadores de Layout • Gerenciadores de Layout – É oferecida uma forma básica de organização dos componentes gráficos no container – Implementam a interface Layout. Manager 2005 Pearson Education, Inc. All rights reserved.
105 Observação Muitos ambientes de programação oferecem ferramentas de projeto de interfaces que ajudam o programador a graficamente definir sua interface; a ferramenta de projeto em seguida escreve o código java que implementa a interface. Tais ferramentas com freqüência oferecem um controle maior quanto ao tamanho, posição e alinhamento dos componentes gráficos que os gerenciadores de layout básicos. 2005 Pearson Education, Inc. All rights reserved.
106 Alguns Gerenciadores de Layout. 2005 Pearson Education, Inc. All rights reserved.
107 q Flow. Layout • Flow. Layout – Gerenciador de layout mais simples – Componentes são colocados da esquerda para a direita na ordem em que são adicionados – Componentes podem ser alinhados a esquerda, centrado ou a direita 2005 Pearson Education, Inc. All rights reserved.
108 Outline Flow. Layout. Frame. java (1 de 3) Cria Flow. Layout Define layout da aplicação 2005 Pearson Education, Inc. All rights reserved.
109 Outline Adiciona JButton; Flow. Layout tratará Flow. Layout. Frame posicionametno. java (2 of 3) Define alinhamento a esquerda Ajusta layout Adiciona JButton; Flow. Layout tratará o posicionamento Define alinhamento ao centro 2005 Pearson Education, Inc. All rights reserved.
Outline 110 Reajusta alinhamento Flow. Layout. Frame. java (3 de 3) Adiciona JButton; Flow. Layout tratará posicionamento Define alinhamento a direita Reajusta alinhamento 2005 Pearson Education, Inc. All rights reserved.
Outline 111 Flow. Layout. Demo. java 2005 Pearson Education, Inc. All rights reserved.
112 q Border. Layout • Border. Layout – Organiza componentes em cinco regiões – north, south, east, west e center – Implementa a interface Layout. Manager 2 – Fornece espaçamento horizontal e vertical 2005 Pearson Education, Inc. All rights reserved.
113 Observação Se nenhuma região é especificada durante a adição de um Component ao Border. Layout, o gerenciador posicionará este componente na região Border. Layout. CENTER. 2005 Pearson Education, Inc. All rights reserved.
114 Observação Cada container pode ter apenas um gerenciador de layout. Containers separados na mesma aplicação podem usar diferentes gerenciadores de layout. 2005 Pearson Education, Inc. All rights reserved.
115 Erro de programação comum Quando mais de um componente é adicionado em uma região no Border. Layout, apenas o último componente adicionado a esta região será apresentado. Nenhum erro indicará este problema. 2005 Pearson Education, Inc. All rights reserved.
116 Outline Border. Layout Demo. java (1 de 2) Espaço horizontal Espaço vertical 2005 Pearson Education, Inc. All rights reserved.
117 Outline Border. Layout Demo. java (2 of 2) 2005 Pearson Education, Inc. All rights reserved.
118 Outline Border. Layout Frame. java (1 de 2) Declara atributo Border. Layout Cria Border. Layout Define layout Registra tratador de evento 2005 Pearson Education, Inc. All rights reserved.
119 Outline Border. Layout Adiciona botões à aplicação usando Frame. java constantes do gerenciador de layout (2 de 2) Torna os botões invisíveis Torna os botões visíveis Atualiza layout 2005 Pearson Education, Inc. All rights reserved.
120 q Grid. Layout • Grid. Layout – Organização na forma de uma grade (linhas e colunas) – Todo componente tem a mesma altura e largura 2005 Pearson Education, Inc. All rights reserved.
Outline 121 Grid. Layout. Demo. java 2005 Pearson Education, Inc. All rights reserved.
122 Outline Grid. Layout Frame. java (1 de 2) Declara dois atributos Grid. Layout Cria Grid. Layout Configura layout 2005 Pearson Education, Inc. All rights reserved.
123 Outline Grid. Layout Adiciona botões ao JFrame. java (2 de 2) Usa segundo layout Usa primeiro layout Atualiza layout 2005 Pearson Education, Inc. All rights reserved.
124 q Grid. Bag. Layout • Gerenciador do Layout Grid. Bag. Layout – É o mais poderoso dos gerenciadores de layout – Semelhante a Grid. Layout • Mas permite que o tamanho de cada componente varie e que estes possam ser definidos em qualquer ordem. • Componentes podem ocupar múltiplas linhas e colunas – Gerenciador mais utilizado e também o mais complexo • Dado que os demais não têm os facilidades para elaboração de interfaces mais sofisticadas. 2005 Pearson Education, Inc. All rights reserved.
125 q Grid. Bag. Layout (Cont. ) • Tela é dividida em linhas e colunas – representando as células que serão ocupadas pelos componentes; 0 1 2 3 4 5 2005 Pearson Education, Inc. All rights reserved.
126 q Grid. Bag. Layout (Cont. ) • Método importante da classe Grid. Bag. Layout – public void set. Constraints(Component comp, Grid. Bag. Constraints constraints) • Define as características de apresentação (restrições) do component comp no layout. 2005 Pearson Education, Inc. All rights reserved.
127 q Grid. Bag. Layout (Cont. ) • Duas classes são importantes para definição do layout – Grid. Bag. Constraints • Grid. Bag. Constraints() • Grid. Bag. Constraints(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady) – Insets • Ajustes extras 2005 Pearson Education, Inc. All rights reserved.
128 q Grid. Bag. Layout (Cont. ) gridx especifica a coluna gridy especifica a linha gridwidth especifica o número de células ocupadas na linha pelo componente gridheight especifica o número de células ocupadas na coluna pelo componente weightx especifica como distribuir o espaço horizontal extra weighty especifica como distribuir o espaço vertical extra anchor determina o alinhamento do objeto. CENTER, NORTHEAST, SOUTHEAST, SOUTHWEST, e NORTHWEST. O padrão é CENTER fill permite o redimensionamento do componente quando este é maior que célula. NONE, HORIZONTAL, VERTICAL, BOTH insets permite realizar ajustes extras no posicionamento dos componentes ipadx permite ajustes adicionais na linha ipady permite ajustes adicionais na coluna 2005 Pearson Education, Inc. All rights reserved.
129 q Grid. Bag. Layout (Cont. ) • Um método útil para simplificar o entendimento – Sendo constraints = new Grid. Bag. Constraints(); 2005 Pearson Education, Inc. All rights reserved.
130 q Grid. Bag. Layout (Cont. ) • Exemplo de construção da interface private JLabel lbl. Nome = new JLabel("Nome: "); lbl. Sobrenome = new JLabel("Sobrenome: "); lblnum. Carteira. Trabalho = new JLabel(“NCT: "); lbl. Salario = new JLabel("Salario Mensal: "); //Campos de edição private JText. Field edt. Nome = new JText. Field(); edt. Sobrenome = new JText. Field(); edtnum. Carteira. Trabalho = new JText. Field(); edt. Salario = new JText. Field(); private JButton btn. Confirmar = new JButton("Confirmar"); private JButton btn. Cancelar = new JButton("Cancelar"); 2005 Pearson Education, Inc. All rights reserved.
131 q Grid. Bag. Layout (Cont. ) • Exemplo de construção da interface layout = new Grid. Bag. Layout(); set. Layout(layout); constraints = new Grid. Bag. Constraints(); constraints. fill = Grid. Bag. Constraints. BOTH; constraints. insets = new Insets(10, 0, 10); add. Component(lbl. Nome, 0, 0, 1, 1); add. Component(edt. Nome, 0, 1, 3, 1); add. Component(lbl. Sobrenome, 1, 0, 1, 1); add. Component(lblnum. Carteira. Trabalho, 2, 0, 1, 1); add. Component(lbl. Salario, 3, 0, 1, 1); add. Component(edt. Sobrenome, 1, 1, 3, 1); add. Component(edtnum. Carteira. Trabalho, 2, 1, 3, 1); add. Component(edt. Salario, 3, 1); add. Component(btn. Confirmar, 4, 2, 1, 1); add. Component(btn. Cancelar, 4, 3, 1, 1); 2005 Pearson Education, Inc. All rights reserved.
132 q Grid. Bag. Layout (Cont. ) • Insets(int top, int left, int bottom, int right) top a distância em relação ao topo left a distância em relação a esquerda bottom a distância em relação a base right a distância em relação a direita top left right bottom 2005 Pearson Education, Inc. All rights reserved.
133 q Grid. Bag. Layout (Cont. ) • Insets(int top, int left, int bottom, int right) – constraints. insets = new Insets(20, 12, 15, 25); 20 25 12 15 2005 Pearson Education, Inc. All rights reserved.
q Usando Panels para gerenciar layouts mais complexos 134 • Interfaces gráficas complexas com freqüência requerem vários painéis para organizar seus componentes de modo apropriado 2005 Pearson Education, Inc. All rights reserved.
135 Outline Panel. Frame. java (1 de 2) Declara um JPanel para apresentar botões Cria JPanel Configura layout 2005 Pearson Education, Inc. All rights reserved.
136 Outline Panel. Frame. java Adiciona o painel de botões (2 de 2) Adiciona painel à aplicação 2005 Pearson Education, Inc. All rights reserved.
137 Outline Panel. Demo. java 2005 Pearson Education, Inc. All rights reserved.
138 q Usando Menus com Frames • Menus – Permite ao usuário solicitar ações – Pode ser anexado apenas a objetos da classe que têm o método set. Menu. Bar, tal como JFrame e JApplet – Classe Menu. Bar • Contém métodos necessários para gerenciar uma barra de menu – Classe JMenu • Contém os métodos necessário para gerenciar menus – Classe JMenu. Item • Contém os métodos necessários para gerenciar itens de menu 2005 Pearson Education, Inc. All rights reserved.
139 q Usando Menus com Frames (Cont. ) – Classe JCheck. Box. Menu. Item • Contém os métodos necessários para gerenciar itens de menus que pode ser colocados como on ou off – Classe JRadio. Button. Menu. Item • Contém os métodos necessários para gerenciar itens de menu que podem ser on ou off como em JCheck. Box. Menu. Items • Quando vários JRadio. Button. Menu. Items são mantidos como parte de um Button. Group, apenas um item no grupo pode ser selecionado – Mnemônicos • Caracteres especiais que podem oferecer acesso rápido ao menu ou item do menu a partir do teclado 2005 Pearson Education, Inc. All rights reserved.
140 Outline Menu. Test. java (1 de 2) Menu Caracteres mnemônicos Barra de menu 2005 Pearson Education, Inc. All rights reserved.
141 Outline Submenu expandido Menu items Menu. Test. java (2 de 2) Linha separadora 2005 Pearson Education, Inc. All rights reserved.
142 Outline Menu. Frame. java (1 de 8) 2005 Pearson Education, Inc. All rights reserved.
143 Outline Menu. Frame. java (2 de 8) Cria um JMenu Chama método JMenu set. Mnemonic Adiciona the JMenu. Item “About…” ao file. Menu 2005 Pearson Education, Inc. All rights reserved.
Outline Cria um Action. Listener para 144 processar eventos de ação em about. Item Apresenta uma caixa de mensagem de dialogo Menu. Frame. java (3 de 8) Cria e adiciona o item de menu exit. Item Registra um Action. Listener que encerra a aplicação 2005 Pearson Education, Inc. All rights reserved.
Outline Adiciona file. Menu ao JMenu. Bar e anexa o JMenu. Bar à janela da aplicação 145 Menu. Frame. java (4 de 8) Cria menu format. Menu cria submenu color. Menu Cria array JRadio. Button. Menu. Item color. Items Cria um Button. Group para assegurar que apenas um dos itens de menu seja selecionado por vez Adiciona JRadio. Button. Menu. Items ao color. Menu e registra Action. Listeners 2005 Pearson Education, Inc. All rights reserved.
146 Outline Chama método Abstract. Button set. Selected Menu. Frame. java (5 de 8) Adiciona color. Menu ao format. Menu e adiciona uma linha de separação horizontal Cria array de JRadio. Button. Menu. Item fonts Cria um Button. Group para assegurar que apenas um dos itens do menu sejam selecionados por vez Adiciona JRadio. Button. Menu. Items ao color. Menu e registra Action. Listeners Configura seleção default e adiciona separador horizontal 2005 Pearson Education, Inc. All rights reserved.
147 Outline Menu. Frame. java Cria JCheck. Box. Menu. Items (6 de 8) Adiciona font. Menu ao format. Menu e format. Menu ao JMenu. Bar 2005 Pearson Education, Inc. All rights reserved.
148 Outline Menu. Frame. java (7 de 8) Determina o JRadio. Button. Menu. Item selecionado Método get. Source retorna uma referência ao JRadio. Button. Menu. Item que gerou o evento 2005 Pearson Education, Inc. All rights reserved.
149 Outline Menu. Frame. java Chamado se o usuário seleciona (8 um de 8) JCheck. Box. Menu. Item em font. Menu Determina se um ou os dois JCheck. Box. Menu. Items estão selecionados 2005 Pearson Education, Inc. All rights reserved.
150 q JTabbed. Pane • JTabbed. Pane – Organiza componentes gráficos em camadas em que apenas uma camada é visível por vez • Quando o usuário clica na guia, a camada apropriada é apresentada – As guias podem ser posicionados no topo (default), esquerda, direita ou embaixo – Qualquer componente pode ser colocado em uma guia – Se as guias não couberem em uma linha, eles serão colocados em linhas adicionais 2005 Pearson Education, Inc. All rights reserved.
151 Outline JTabbed. Pane Demo. java 2005 Pearson Education, Inc. All rights reserved.
152 Outline JTabbed. Pane Frame. java (1 de 2) Cria um JTabbed. Pane vazio com as configurações default Chama método JTabbed. Pane add. Tab com argumentos que especificam o título da guia, uma referência a interface Icon para apresentar na guia, o COMPONENT a apresentar quando o usuário clica na guia e a string tooltip da guia 2005 Pearson Education, Inc. All rights reserved.
153 Outline Adiciona panel 2 ao tabbed. Pane JTabbed. Pane Frame. java (2 de 2) Adiciona panel 3 ao tabbed. Pane 2005 Pearson Education, Inc. All rights reserved.
154 q JMenu e Card. Layout • Card. Layout – Gerenciador de layout que empilha os componentes de um container de tal forma que apenas o componente que está no topo permanece visível – Métodos de navegação first(), next(), previous() e last() • Permitem "navegar" entre os componentes empilhados – determinando qual item deve estar visível em um dado momento – permitem realizar uma varredura seqüencial pelos componentes de container especificado 2005 Pearson Education, Inc. All rights reserved.
155 q JMenu e Card. Layout • Card. Layout – Método show() • permite selecionar um componente para exposição diretamente através de uma string – String especificada como uma restrição quando da adição do componente ao container 2005 Pearson Education, Inc. All rights reserved.
156 // Arquivo: JTabbed. Pane. Demo. java // Demonstrando Card. Layout. import javax. swing. JFrame; public class Card. Layout. Test { public static void main( String args[] ) { Card. Layout. Demo card. Layout. Demo = new Card. Layout. Demo(); card. Layout. Demo. set. Default. Close. Operation( JFrame. EXIT_ON_CLOSE ); card. Layout. Demo. set. Size( 300, 200 ); // define tamanho do frame card. Layout. Demo. set. Resizable(false); card. Layout. Demo. set. Visible( true ); // apresenta frame } // fim do main } // fim da classe JGrid. Layout. Bag. Demo Card. Layout. Test. java 2005 Pearson Education, Inc. All rights reserved.
157 // Arquivo Card. Layout. Demo // Demonstração do Card. Layout import java. awt. *; import java. awt. event. *; import javax. swing. *; public class Card. Layout. Demo extends JFrame implements Action. Listener { private JPanel cards; //um JPanel que usa Card. Layout private JMenu menu; //menu principal Panel private JMenu. Item button. Item; //item do menu Panel private JMenu. Item text. Item; //item do menu Panel private JMenu. Bar bar; //barra de menu Card. Layout. Test. java // Constantes usadas para identificar os JPanels (as Cards) final static String BUTTONPANEL = "Card with JButtons"; final static String TEXTPANEL = "Card with JText. Field"; public Card. Layout. Demo () { // Define o título do aplicativo super("Demo de Card. Layout"); // Cria Menu Panel menu = new JMenu("Panel"); // Cria itens do menu Panel button. Item = new JMenu. Item(BUTTONPANEL); text. Item = new JMenu. Item(BUTTONPANEL); menu. add(button. Item); menu. add(text. Item); // Associa tratador de eventos aos itens do menu button. Item. add. Action. Listener(this); text. Item. add. Action. Listener(this); // Define a barra de menu com o menu Panel bar = new JMenu. Bar(); bar. add(menu); set. JMenu. Bar( bar ); 2005 Pearson Education, Inc. All rights reserved.
158 // Cria card de botões JPanel card 1 = new JPanel(); card 1. add(new JButton("Button 1")); card 1. add(new JButton("Button 2")); card 1. add(new JButton("Button 3")); Card. Layout. Test. java // Cria card com campo de texto JPanel card 2 = new JPanel(); card 2. add(new JText. Field("Text. Field", 20)); // Cria JPanel com layout Card. Layout que conterá as cards = new JPanel(new Card. Layout()); cards. add(card 1, BUTTONPANEL); cards. add(card 2, TEXTPANEL); // adiciona cards ao JFrame add(cards, Border. Layout. CENTER); } // Trata os eventos de seleção no menu Panel public void action. Performed( Action. Event event ) { // Obtém o Layout Card. Layout do JPanel Card. Layout cl = (Card. Layout)(cards. get. Layout()); // Apresenta o JPanel apropriado de acordo com a seleção no menu if (event. get. Source() == button. Item) cl. show(cards, BUTTONPANEL); else cl. show(cards, TEXTPANEL); } } 2005 Pearson Education, Inc. All rights reserved.
- Slides: 158