1 / 158

COMPONENTES GUI (capítulo 11 Deitel)

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 INE5605-Turma 0238A. Objetivos. Neste cap í tulo aprenderemos:

Download Presentation

COMPONENTES GUI (capítulo 11 Deitel)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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 INE5605-Turma 0238A

  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 2

  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 3

  4. Internet Explorer com componentes GUI. 4 Botão Menus Barra de título Barra de menus Campo de texto Barras de rolagem

  5. Entrada/Saída Simples Baseada em GUI comJOptionPane Caixas de diálogo Usada pelas aplicações para interagir com o usuário Oferecida pela classe Java JOptionPane Contém diálogos de entrada e de mensagem 5

  6. Resumo Adicao.java (1 de 2) 6 Mostra caixa de entrada para receber o primeiro inteiro Mostra caixa de entrada para receber o segundo inteiro Mostra caixa de mensagem para apresentar a soma ao usuário

  7. Caixa de Dialogo: Caixa de Mensagem Classe JOptionPane Método JOptionPane.showMessageDialog 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 7 // Imprime linhas na caixa de dialogo import javax.swing.JOptionPane; // importa classe JOptionPane public class Dialog2 { public static void main( String args[] ) { // apresenta um dialogo com a mensagem JOptionPane.showMessageDialog( null, "Bem vindo\na\nJava" , "Titulo", JOptionPane.INFORMATION_MESSAGE); } }

  8. Adicao.java (2 de 2) 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, showInputDialogretorna para o programa o 2 digitado pelo usuário como uma String. O programa deve converter o String para um int 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

  9. Constantes staticJOptionPane para caixas de dialogo. 9

  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 2D. Juntos, eles oferecem uma interface gráfica para programas em Java que rodam em plataformas populares como Microsoft Windows, Linux, e Mac OSX. 10

  11. Alguns componentes gráficos básicos. 11

  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 12

  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. 13

  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 14

  15. Observação A forma de apresentação da interface definida por componentes GUI pesados a partir do pacote java.awtvaria 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. 15

  16. Superclasses dos componentes GUI leves do Swing 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 16

  17. Apresentação de Textos e Imagens em uma Janela 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 17

  18. Nomeando componentes GUI Label Instruções ou informações textuais indicando o propósito de cada componentes Criado com a classe JLabel 18

  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 é FlowLayout Configurado com o método setLayout da classe JFrame 19

  20. Resumo LabelFrame.java (1 de 2) 20

  21. Resumo LabelFrame.java (2 de 2) 21

  22. Resumo TesteLabel.java 22

  23. Criando e anexando label1 Construtor tendo como argumento o texto Método setToolTipText da classe JComponent Especifica o texto de ajuda (tool tip) Método add da classe Container Adiciona um componente em um container 23 label1 = new JLabel( "Label com texto" ); label1.setToolTipText( "Este é o label1" ); add( label1 ); // adiciona label1 ao JFrame

  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. 24

  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. 25

  26. Criando e Anexando label2 Texto, ícone e posicionamento são passados no construtor de JLabel Interface Icon: Pequena imagem de tamanho fixo IconImage é 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 MediaTracker No exemplo é passado o URL (getClass().getRessource()) 26 Icon bug = new ImageIcon( getClass().getResource( "bug1.gif" ) ); label2 = new JLabel( "Label com texto e icone", bug, SwingConstants.LEFT ); label2.setToolTipText( "Este é label2" ); add( label2 ); // adiciona label2 ao JFrame

  27. Criando e Anexando label3 Construtor default e uso de métodos JLabel getText e setText Para definir e recuperar o texto de um label getIcon e setIcon Para definir e recuperar o ícone apresentado no label getHorizontalTextPosition e setHorizontalTextPosition Para definir e recuperar a posição horizontal do texto apresentado no label 27 label3 = new JLabel(); // construtor JLabel sem argumentos label3.setText( "Label com icone e texto no botão " ); label3.setIcon( bug ); // adiciona icone ao JLabel label3.setHorizontalTextPosition( SwingConstants.CENTER ); label3.setVerticalTextPosition( SwingConstants.BOTTOM ); label3.setToolTipText( "Este é label3" ); add( label3 ); // adiciona label3 ao JFrame

  28. Criando e Anexando label2 Interface SwingConstants Declara um conjunto de constantes inteiras comuns tal como aquela usada para definir o alinhamento dos componentes Pode ser usada com métodos setHorizontalAlignment e setVerticalAlignment 28

  29. Alguns componentes GUI básicos 29

  30. Criando e Apresentando a janela LabelFrame Outros métodos JFrame setDefaultCloseOperation Indica como a aplicação reage quando o usuário clica no botão fechar setSize Especifica a altura e largura da janela setVisible Determina se a janela é apresentada (true) ou não (false) 30 public static void main( String args[] ) { LabelFrame labelFrame = new LabelFrame(); // cria LabelFrame labelFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); labelFrame.setSize( 275, 180 ); // define tamanho do frame labelFrame.setVisible( true ); // apresenta frame } // fim do main

  31. Campos de texto e uma introdução a tratamento de eventos com classes aninhadas 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) 31

  32. Campos de texto e uma introdução a tratamento de eventos com classes aninhadas Classe JTextComponent Superclasse de JTextField Superclasse de JPasswordField Adiciona o caractere echo para esconder a entrada de texto no componente 32

  33. Resumo FrameCampoDeTexto.java (1 de 3) 33 Cria um novo JTextField

  34. Resumo FrameCampoDeTexto.java (2 de 3) 34 Cria um novo JTextField Cria um novo JPasswordField Criar tratador de evento Registra tratador de evento Cria um novo JTextField não editável Cria uma classe tratador de evento pela implementação da interface ActionListener Declara método actionPerformed

  35. Outline FrameCampoDeTexto.java (3 de 3) 35 Testa se a fonte do evento é o primeiro campo de texto Testa se a fonte do evento é o segundo campo de texto Testa se a fonte do evento é o terceiro campo de texto Testa se a fonte do evento é o campo password Obtém texto do campo de texto Obtém texto do campo de texto Obtém texto do campo de texto Obtém password do campo password

  36. Outline TesteCampoDeTexto.java (1 de 2) 36

  37. Resumo TesteCampoDeTexto.java (2 de 2) 37

  38. Passos necessários para configurar um tratador de eventos para um componente gráfico 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 38 TratadorCampoDeTexto tratador = new TratadorCampoDeTexto(); campoDeTexto1.addActionListener( tratador ); //... private class TratadorCampoDeTexto implements ActionListener { // processa eventos no campo de texto public void actionPerformed( ActionEvent event ) { //... } }

  39. Usando uma classe aninhada para implementar um tratador de eventos 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 39 public class FrameCampoDeTexto extends JFrame { //... private class TratadorCampoDeTexto implements ActionListener { //... } }

  40. Observação Um classe interna pode acessar diretamente os atributos e métodos da classe externa, mesmo se eles são private. 40

  41. Usando uma classe aninhada para implementar um tratador de eventos JTextFields e JPasswordFields Digitando “enter” dentro destes campos causa um ActionEvent Processado pelos objetos que implementam a interface ActionListener 41

  42. Registrando o tratador de eventos para cada campo de texto Registrando um tratador de evento Chamando método addActionListener para registrar um objeto ActionListener ActionListener observa eventos no objeto 42 TratadorCampoDeTexto tratador = new TratadorCampoDeTexto(); campoDeTexto1.addActionListener( tratador );

  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. 43

  44. Detalhes do método actionPerformed da classe TratadorCampoDeTexto Fonte do evento Componente na qual o evento foi originado Pode ser determinada usando o método getSource Texto de um JTextField pode ser obtido usando getActionCommand Texto de um JPasswordField pode ser obtido usando getPassword (retorna um char[]) 44 private class TratadorCampoDeTexto implements ActionListener { // processa eventos no campo de texto public void actionPerformed( ActionEvent event ) { String string = ""; // declara string a apresentar // usuario clicou Enter no JTextField campoDeTexto1 if ( event.getSource() == campoDeTexto1 ) string = String.format( "campoDeTexto1: %s", event.getActionCommand() );

  45. Tipos de eventos gráficos comuns e interfaces Listener 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. 45

  46. Algumas classes de evento do pacote java.awt.event. 46

  47. Algumas interfaces comuns do pacote java.awt.event. 47

  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 ActionEvents são manipulados pelos ActionListeners MouseEvents são manipulados pelos MouseListeners e MouseMotionsListeners KeyEvents são manipulados por KeyListeners 48

  49. Tratamento de evento • Perguntas remanescentes: • Como o handler de evento ficou registrado? • Como o componente GUI sabe chamar actionPerformed em vez de algum outro método de tratamento de evento? • Cada JComponent tem uma variável de instância listenerList: • Objeto do tipo EventListenerList. • Mantém referências a todos os seus ouvintes registrados.

  50. Registro de evento para JTextField textField1

More Related