A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 COMPONENTES GUI (capítulo 11 Deitel) Roberto Willrich INE-CTC-UFSC Carla Merkle Westphall INE-CTC-UFSC URL:

Apresentações semelhantes


Apresentação em tema: "1 COMPONENTES GUI (capítulo 11 Deitel) Roberto Willrich INE-CTC-UFSC Carla Merkle Westphall INE-CTC-UFSC URL:"— Transcrição da apresentação:

1 1 COMPONENTES GUI (capítulo 11 Deitel) Roberto Willrich INE-CTC-UFSC Carla Merkle Westphall INE-CTC-UFSC URL: INE5605-Turma 0238A

2  2005 Pearson Education, Inc. All rights reserved. 22 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

3  2005 Pearson Education, Inc. All rights reserved. 3 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

4  2005 Pearson Education, Inc. All rights reserved. 44 Internet Explorer com componentes GUI. BotãoMenusBarra de títuloBarra de menusCampo de texto Barras de rolagem

5  2005 Pearson Education, Inc. All rights reserved. 5 5 Entrada/Saída Simples Baseada em GUI com JOptionPane •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

6  2005 Pearson Education, Inc. All rights reserved. 6 6 Resumo Adicao.java (1 de 2) 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  2005 Pearson Education, Inc. All rights reserved. 7 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 // 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  2005 Pearson Education, Inc. All rights reserved. 8 8 Adicao.java (2 de 2) Caixas de diálogos apresentadas pelas linhas 10–11 Caixa de entrada apresentada pelas linhas 12 – 13 Caixa de mensagem apresentada pelas linhas 22 – 23 Campo de texto em que o usuário digita um valor Prompt para o usuário Quando o usuário clica em OK, showInputDialog retorna para o programa o 2 digitado pelo usuário como uma String. O programa deve converter o String para um int Barra de titulo Quando o usuário clica em OK, a caixa de mensagem desaparece

9  2005 Pearson Education, Inc. All rights reserved. 99 Constantes static JOptionPane para caixas de dialogo.

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

11  2005 Pearson Education, Inc. All rights reserved. 11 Alguns componentes gráficos básicos.

12  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

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

14  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

15  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.

16  2005 Pearson Education, Inc. All rights reserved. 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 Component s •Classe JComponent (pacote javax.swing ) – Subclasse de Container – Superclasse de todos os componentes Swing leves

17  2005 Pearson Education, Inc. All rights reserved. 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

18  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

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

20  2005 Pearson Education, Inc. All rights reserved. 20 Resumo LabelFrame.java (1 de 2)

21  2005 Pearson Education, Inc. All rights reserved. 21 Resumo LabelFrame.java (2 de 2)

22  2005 Pearson Education, Inc. All rights reserved. 22 Resumo TesteLabel.java

23  2005 Pearson Education, Inc. All rights reserved. 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 label1 = new JLabel( "Label com texto" ); label1.setToolTipText( "Este é o label1" ); add( label1 ); // adiciona label1 ao JFrame

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

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

26  2005 Pearson Education, Inc. All rights reserved. 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()) 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  2005 Pearson Education, Inc. All rights reserved. 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 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  2005 Pearson Education, Inc. All rights reserved. 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

29  2005 Pearson Education, Inc. All rights reserved. 29 Alguns componentes GUI básicos

30  2005 Pearson Education, Inc. All rights reserved. 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 ) 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  2005 Pearson Education, Inc. All rights reserved. 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)

32  2005 Pearson Education, Inc. All rights reserved. 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

33  2005 Pearson Education, Inc. All rights reserved. 33 Resumo FrameCampoDe Texto.java (1 de 3) Cria um novo JTextField

34  2005 Pearson Education, Inc. All rights reserved. 34 Resumo FrameCampoDe Texto.java (2 de 3) Cria um novo JTextField Cria um novo JTextField não editável Cria um novo JPasswordField Criar tratador de eventoRegistra tratador de evento Cria uma classe tratador de evento pela implementação da interface ActionListener Declara método actionPerformed

35  2005 Pearson Education, Inc. All rights reserved. 35 Outline FrameCampoDe Texto.java (3 de 3) Testa se a fonte do evento é o primeiro campo de texto Obtém texto do campo de texto Obtém password do campo password 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

36  2005 Pearson Education, Inc. All rights reserved. 36 Outline TesteCampoDe Texto.java (1 de 2)

37  2005 Pearson Education, Inc. All rights reserved. 37 Resumo TesteCampoDe Texto.java (2 de 2)

38  2005 Pearson Education, Inc. All rights reserved. 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 TratadorCampoDeTexto tratador = new TratadorCampoDeTexto(); campoDeTexto1.addActionListener( tratador ); //... private class TratadorCampoDeTexto implements ActionListener { // processa eventos no campo de texto public void actionPerformed( ActionEvent event ) { //... }

39  2005 Pearson Education, Inc. All rights reserved. 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 public class FrameCampoDeTexto extends JFrame { //... private class TratadorCampoDeTexto implements ActionListener { //... }

40  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.

41  2005 Pearson Education, Inc. All rights reserved. 41 Usando uma classe aninhada para implementar um tratador de eventos •JTextField s e JPasswordField s – Digitando “enter” dentro destes campos causa um ActionEvent •Processado pelos objetos que implementam a interface ActionListener

42  2005 Pearson Education, Inc. All rights reserved. 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 TratadorCampoDeTexto tratador = new TratadorCampoDeTexto(); campoDeTexto1.addActionListener( tratador );

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

44  2005 Pearson Education, Inc. All rights reserved. 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[]) 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  2005 Pearson Education, Inc. All rights reserved. 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.

46  2005 Pearson Education, Inc. All rights reserved. 46 Algumas classes de evento do pacote java.awt.event.

47  2005 Pearson Education, Inc. All rights reserved. 47 Algumas interfaces comuns do pacote java.awt.event.

48  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 •ActionEvent s são manipulados pelos ActionListener s •MouseEvent s são manipulados pelos MouseListener s e MouseMotionsListener s •KeyEvent s são manipulados por KeyListener s

49  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 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  2005 Pearson Education, Inc. All rights reserved. 50 Registro de evento para JTextField textField1

51  2005 Pearson Education, Inc. All rights reserved. 51  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 AbstractButton

52  2005 Pearson Education, Inc. All rights reserved. 52 Hierarquia do Botão Swing.

53  2005 Pearson Education, Inc. All rights reserved. 53  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 ActionEvent quando ele é clicado

54  2005 Pearson Education, Inc. All rights reserved. 54 Resumo FrameBotao.java (1 de 2) Declara dois atributos JButton Cria novo JButton Cria dois ImageIcon sCria novo JButton Define rollover icon para JButton

55  2005 Pearson Education, Inc. All rights reserved. 55 Resumo FrameBotao.java (2 de 2) Cria tratador para botões Registra tratador de eventos Classe interna implementa ActionListener Acesso a atributo da classe externa usando a referência this Obtém texto do JButton clicado

56  2005 Pearson Education, Inc. All rights reserved. 56 Resumo TesteBotao.java (1 de 1)

57  2005 Pearson Education, Inc. All rights reserved. 57  JButton •JButton s 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 setRolloverIcon Icon bug1 = new ImageIcon( getClass().getResource( "bug1.gif" ) ); Icon bug2 = new ImageIcon( getClass().getResource( "bug2.gif" ) ); fancyJButton = new JButton( "Fancy Button", bug1 ); // set image fancyJButton.setRolloverIcon( bug2 ); // set rollover image add( fancyJButton ); // adiciona fancyJButton ao JFrame

58  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 FrameBotao.this.

59  2005 Pearson Education, Inc. All rights reserved. 59  Botões que mantém um estado •Botões com estado – Swing contém três tipos de botões com estado – JToggleButton, JCheckBox and JRadioButton – JCheckBox e JRadioButton são subclasses de JToggleButton

60  2005 Pearson Education, Inc. All rights reserved. 60  JCheckBox •JCheckBox – Contém um rótulo que aparece na direita do check box por default – Gera um ItemEvent quando este é clicado •ItemEvent s são tratados por ItemListener •Passado para o método itemStateChanged – Método isSelected retorna se o check box é selecionado ( true ) ou não ( false )

61  2005 Pearson Education, Inc. All rights reserved. 61 Outline CheckBoxFrame.java (1 de 3) Declara dois atributos JCheckBox Define fonte do campo de texto

62  2005 Pearson Education, Inc. All rights reserved. 62 Outline CheckBoxFrame.java (2 de 3) Cria dois JCheckBox es Cria event handlerRegistra event handler nos JCheckBox es Classe interna implementando ItemListener Método itemStateChanged é chamado quando um JCheckBox é clicado Testa se JCheckBox é selecionado

63  2005 Pearson Education, Inc. All rights reserved. 63 Outline CheckBoxFrame.java (3 de 3) Testa fonte do evento Método isSelected retorna se JCheckBox está selecionado

64  2005 Pearson Education, Inc. All rights reserved. 64 Outline CheckBoxTest.java

65  2005 Pearson Education, Inc. All rights reserved. 65  JRadioButton •JRadioButton – 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 ButtonGroup – Declara método add para adicionar um JRadioButton ao grupo – Usualmente representa opções múltiplas exclusivas

66  2005 Pearson Education, Inc. All rights reserved. 66 Erro de programação comum Adicionar um objeto ButtonGroup (ou um objeto de qualquer classe que não seja derivado de Component ) ao container resulta em um erro de compilação.

67  2005 Pearson Education, Inc. All rights reserved. 67 Outline RadioButton Frame.java (1 de 3) Declara quatro JRadioButton s e um ButtonGroup para gerenciar eles

68  2005 Pearson Education, Inc. All rights reserved. 68 Outline RadioButton Frame.java (2 de 3) Cria quatro JRadioButton s Cria o ButtonGroup Adiciona cada JRadioButton ao ButtonGroup

69  2005 Pearson Education, Inc. All rights reserved. 69 Outline RadioButton Frame.java (3 of 3) Registra um event handler a cada JRadioButton Classe interna Event handler implementa ItemListener 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

70  2005 Pearson Education, Inc. All rights reserved. 70 Outline RadioButtonTest.java

71  2005 Pearson Education, Inc. All rights reserved. 71  JComboBox e o uso de classe interna anônima para tratamento de eventos •Combo box – Implementada pela classe JComboBox – Cada item na lista tem um índice – setMaximumRowCount define o número máximo de linhas mostrada por vez – JComboBox oferece uma barra de rolagem e setas cima e baixo para se navegar na lista

72  2005 Pearson Education, Inc. All rights reserved. 72 Usando uma classe interna anônima para tratamento de eventos •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

73  2005 Pearson Education, Inc. All rights reserved. 73 Outline ComboBoxFrame.java (1 of 2) Declara um atributo JComboBox

74  2005 Pearson Education, Inc. All rights reserved. 74 Outline ComboBoxFrame.java (2 of 2) Cria JComboBox e define número máximo de linhas Cria classe interna anônima como event handler Declara método itemStateChanged Método getSelectedIndex localiza item selecionado Testa alteração de estado do JComboBox

75  2005 Pearson Education, Inc. All rights reserved. 75 Outline ComboBoxTest.java Barra de rolagem para visualizar itens na lista Setas de rolagem Caixa de rolagem

76  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.

77  2005 Pearson Education, Inc. All rights reserved. 77  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 ListSelectionEvent ocorre quando um item é selecionado •Tratado por um ListSelectionListener e passado ao método valueChanged

78  2005 Pearson Education, Inc. All rights reserved. 78 Outline ListFrame.java (1 of 2) Declara um atributo JList

79  2005 Pearson Education, Inc. All rights reserved. 79 Outline ListFrame.java (2 de 2) Cria JList Define modo de seleção do JList Adiciona JList ao ScrollPane e o adiciona à aplicação Obtém índice do item selecionado

80  2005 Pearson Education, Inc. All rights reserved. 80 Outline ListTest.java

81  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 que qualquer conjunto seja selecionado

82  2005 Pearson Education, Inc. All rights reserved. 82 Outline Multiple SelectionFrame.java (1 de 3)

83  2005 Pearson Education, Inc. All rights reserved. 83 Outline Multiple SelectionFrame.java (2 de 3) Usa uma lista de seleção de intervalo múltiplo Usa método setListData e getSelectedValues para copiar de uma JList para a outra

84  2005 Pearson Education, Inc. All rights reserved. 84 Outline Multiple SelectionFrame.java (3 de 3) Define larguraDefine altura Define modo de seleção para seleção de intervalo simples

85  2005 Pearson Education, Inc. All rights reserved. 85 Outline Multiple SelectionTest.java

86  2005 by Pearson Education do Brasil 86 Tratamento de evento de mouse •Eventos de mouse: – Cria um objeto MouseEvent. – Tratado por MouseListener s e MouseMotionListener s. – MouseInputListener combina as duas interfaces. – A interface MouseWheelListener declara o método mouseWheelMoved para tratar MouseWheelEvents.

87  2005 by Pearson Education do Brasil 87 Métodos de interface MouseListener e MouseMotionListener. (Parte 1 de 2.)‏

88  2005 by Pearson Education do Brasil 88 Métodos de interface MouseListener e MouseMotionListener. (Parte 2 de 2.)‏

89  2005 by Pearson Education do Brasil 89 Resumo MouseTracker Frame.java (1 de 4)‏ Cria JPanel para capturar eventos de mouse Configura o fundo como branco Cria JLabel e o adiciona à aplicação

90  2005 by Pearson Education do Brasil 90 Resumo MouseTracker Frame.java (2 de 4)‏ Cria handler de evento para eventos de mouse Registra um handler de evento Implementa interfaces ouvintes de mouse Determina a localização do clique de mouse Declara o método mouseClicked Declara o método mousePressed Declara o método mouseReleased

91  2005 by Pearson Education do Brasil 91 Resumo MouseTracker Frame.java (3 de 4)‏ Declara o método mouseEntered Configura o segundo plano de JPanel Declara o método mouseExited Configura o segundo plano de JPanel

92  2005 by Pearson Education do Brasil 92 Resumo MouseTracker Frame.java (4 de 4)‏ Declara o método mouseDragged Declara o método mouseMoved

93  2005 by Pearson Education do Brasil 93 Resumo MouseTracker Frame.java (1 de 2)‏

94  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.

95  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 MouseAdapter é um MouseListener ).

96  2005 by Pearson Education do Brasil 96 Herdando MouseAdapter •MouseAdapter : – Classe adaptadora para as interfaces MouseListener e MouseMotionListener. – Estender a classe permite sobrescrever somente os métodos que você deseja utilizar.

97  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 torna- se 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.

98  2005 by Pearson Education do Brasil 98 Classes adaptadoras de evento e as interfaces que elas implementam no pacote java.awt.event.

99  2005 by Pearson Education do Brasil 99 Resumo MouseDetails Frame.java (1 de 2)‏ Registra um handler de evento

100  2005 by Pearson Education do Brasil 100 Resumo MouseDetails 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 clicadoTesta se o botão do meio do mouse foi clicado

101  2005 by Pearson Education do Brasil 101 Resumo MouseDetails.java (1 de 2)‏

102 102 Tabela de Tratamento de Eventos OrigemEventoListener JTextField JPasswordField Jbutton ActionEvent ActionListener actionPerformed(ActionEvent e) JCheckBox JRadioButton ItemEventItemListener itemStateChanged(ItemEvent e) JListListSectionEvent ListSelectionListener valueChanged(ListSelectionEvent e) Subclasses de java.awt.Component MouseEventMouseListener mouseClicked(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) Subclasses de java.awt.Component MouseMotionEventMouseMotionListener mouseDragged(MouseEvent e) mouseMoved(MouseEvent e) Subclasses de java.awt.Component KeyEventKeyListener keyTyped(KeyEvent e) keyPressed(KeyEvent e) keyReleasead(KeyEvent e)

103 103 OrigemEventoListener Subclasses de java.awt.window WindowEventWindowListener windowActivated(WindowEvent e) windowClosed(WindowEvent e) windowClosing(WindowEvent e) windowDeactivated(WindowEvent e) windowDeiconified(WindowEvent e) windowIconified(WindowEvent e) windowOpened(WindowEvent e) Subclasses de java.awt.Component FocusEventFocusListener focusGained(FocusEvent e) focusLost(FocusEvent e) JScrollBarAdjustmentEventAdjustmentListener adjustmentValueChanged( AdjustmentEvent e) JMenuMenuEventMenuListener menuCanceled(MenuEvent e) menuDeselected(MenuEvent e) menuSelected(MenuEvent e) Tabela de Tratamento de Eventos

104  2005 Pearson Education, Inc. All rights reserved. 104 Gerenciadores de Layout •Gerenciadores de Layout – É oferecida uma forma básica de organização dos componentes gráficos no container – Implementam a interface LayoutManager

105  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.

106  2005 Pearson Education, Inc. All rights reserved. 106 Alguns Gerenciadores de Layout.

107  2005 Pearson Education, Inc. All rights reserved. 107  FlowLayout •FlowLayout – 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

108  2005 Pearson Education, Inc. All rights reserved. 108 Outline FlowLayoutFrame.java (1 de 3) Cria FlowLayout Define layout da aplicação

109  2005 Pearson Education, Inc. All rights reserved. 109 Outline FlowLayoutFrame.java (2 of 3) Adiciona JButton ; FlowLayout tratará posicionametno Define alinhamento a esquerda Ajusta layout Adiciona JButton ; FlowLayout tratará o posicionamento Define alinhamento ao centro

110  2005 Pearson Education, Inc. All rights reserved. 110 Outline FlowLayoutFrame.java (3 de 3) Reajusta alinhamento Adiciona JButton ; FlowLayout tratará posicionamento Define alinhamento a direita Reajusta alinhamento

111  2005 Pearson Education, Inc. All rights reserved. 111 Outline FlowLayoutDemo.java

112  2005 Pearson Education, Inc. All rights reserved. 112  BorderLayout •BorderLayout – Organiza componentes em cinco regiões – north, south, east, west e center – Implementa a interface LayoutManager2 – Fornece espaçamento horizontal e vertical

113  2005 Pearson Education, Inc. All rights reserved. 113 Observação Se nenhuma região é especificada durante a adição de um Component ao BorderLayout, o gerenciador posicionará este componente na região BorderLayout.CENTER.

114  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.

115  2005 Pearson Education, Inc. All rights reserved. 115 Erro de programação comum Quando mais de um componente é adicionado em uma região no BorderLayout, apenas o último componente adicionado a esta região será apresentado. Nenhum erro indicará este problema.

116  2005 Pearson Education, Inc. All rights reserved. 116 Outline BorderLayout Demo.java (1 de 2) Espaço horizontalEspaço vertical

117  2005 Pearson Education, Inc. All rights reserved. 117 Outline BorderLayout Demo.java (2 of 2)

118  2005 Pearson Education, Inc. All rights reserved. 118 Outline BorderLayout Frame.java (1 de 2) Declara atributo BorderLayout Cria BorderLayout Define layoutRegistra tratador de evento

119  2005 Pearson Education, Inc. All rights reserved. 119 Outline BorderLayout Frame.java (2 de 2) Adiciona botões à aplicação usando constantes do gerenciador de layout Torna os botões invisíveisTorna os botões visíveis Atualiza layout

120  2005 Pearson Education, Inc. All rights reserved. 120  GridLayout •GridLayout – Organização na forma de uma grade (linhas e colunas) – Todo componente tem a mesma altura e largura

121  2005 Pearson Education, Inc. All rights reserved. 121 Outline GridLayoutDemo.java

122  2005 Pearson Education, Inc. All rights reserved. 122 Outline GridLayout Frame.java (1 de 2) Declara dois atributos GridLayout Cria GridLayout Configura layout

123  2005 Pearson Education, Inc. All rights reserved. 123 Outline GridLayout Frame.java (2 de 2) Adiciona botões ao JFrame Usa segundo layoutUsa primeiro layout Atualiza layout

124  2005 Pearson Education, Inc. All rights reserved. 124  GridBagLayout •Gerenciador do Layout GridBagLayout – É o mais poderoso dos gerenciadores de layout – Semelhante a GridLayout •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.

125  2005 Pearson Education, Inc. All rights reserved. 125  GridBagLayout (Cont.) •Tela é dividida em linhas e colunas – representando as células que serão ocupadas pelos componentes;

126  2005 Pearson Education, Inc. All rights reserved. 126  GridBagLayout (Cont.) •Método importante da classe GridBagLayout – public void setConstraints(Component comp, GridBagConstraints constraints) •Define as características de apresentação (restrições) do component comp no layout. 126

127  2005 Pearson Education, Inc. All rights reserved. 127  GridBagLayout (Cont.) •Duas classes são importantes para definição do layout – GridBagConstraints •GridBagConstraints() •GridBagConstraints(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

128  2005 Pearson Education, Inc. All rights reserved. 128  GridBagLayout (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, NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, 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

129  2005 Pearson Education, Inc. All rights reserved. 129  GridBagLayout (Cont.) •Um método útil para simplificar o entendimento – Sendo constraints = new GridBagConstraints();

130  2005 Pearson Education, Inc. All rights reserved. 130  GridBagLayout (Cont.) •Exemplo de construção da interface private JLabel lblNome = new JLabel("Nome:"); private JLabel lblSobrenome = new JLabel("Sobrenome:"); private JLabel lblnumCarteiraTrabalho = new JLabel(“NCT:"); private JLabel lblSalario = new JLabel("Salario Mensal:"); //Campos de edição private JTextField edtNome = new JTextField(); private JTextField edtSobrenome = new JTextField(); private JTextField edtnumCarteiraTrabalho = new JTextField(); private JTextField edtSalario = new JTextField(); private JButton btnConfirmar = new JButton("Confirmar"); private JButton btnCancelar = new JButton("Cancelar");

131  2005 Pearson Education, Inc. All rights reserved. 131  GridBagLayout (Cont.) •Exemplo de construção da interface layout = new GridBagLayout(); setLayout(layout); constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.BOTH; constraints.insets = new Insets(10, 10, 0, 10); addComponent(lblNome, 0, 0, 1, 1); addComponent(edtNome, 0, 1, 3, 1); addComponent(lblSobrenome, 1, 0, 1, 1); addComponent(lblnumCarteiraTrabalho, 2, 0, 1, 1); addComponent(lblSalario, 3, 0, 1, 1); addComponent(edtSobrenome, 1, 1, 3, 1); addComponent(edtnumCarteiraTrabalho, 2, 1, 3, 1); addComponent(edtSalario, 3, 1, 3, 1); addComponent(btnConfirmar, 4, 2, 1, 1); addComponent(btnCancelar, 4, 3, 1, 1);

132  2005 Pearson Education, Inc. All rights reserved. 132  GridBagLayout (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

133  2005 Pearson Education, Inc. All rights reserved. 133  GridBagLayout (Cont.) •Insets(int top, int left, int bottom, int right) – constraints.insets = new Insets(20, 12, 15, 25);

134  2005 Pearson Education, Inc. All rights reserved. 134  Usando Panels para gerenciar layouts mais complexos •Interfaces gráficas complexas com freqüência requerem vários painéis para organizar seus componentes de modo apropriado

135  2005 Pearson Education, Inc. All rights reserved. 135 Outline PanelFrame.java (1 de 2) Declara um JPanel para apresentar botões Cria JPanel Configura layout

136  2005 Pearson Education, Inc. All rights reserved. 136 Outline PanelFrame.java (2 de 2) Adiciona o painel de botõesAdiciona painel à aplicação

137  2005 Pearson Education, Inc. All rights reserved. 137 Outline PanelDemo.java

138  2005 Pearson Education, Inc. All rights reserved. 138  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 setMenuBar, tal como JFrame e JApplet – Classe MenuBar •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 JMenuItem •Contém os métodos necessários para gerenciar itens de menu

139  2005 Pearson Education, Inc. All rights reserved. 139  Usando Menus com Frames (Cont.) – Classe JCheckBoxMenuItem •Contém os métodos necessários para gerenciar itens de menus que pode ser colocados como on ou off – Classe JRadioButtonMenuItem •Contém os métodos necessários para gerenciar itens de menu que podem ser on ou off como em JCheckBoxMenuItem s •Quando vários JRadioButtonMenuItem s são mantidos como parte de um ButtonGroup, 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

140  2005 Pearson Education, Inc. All rights reserved. 140 Outline MenuTest.java (1 de 2) Menu Caracteres mnemônicos Barra de menu

141  2005 Pearson Education, Inc. All rights reserved. 141 Outline MenuTest.java (2 de 2) Menu items Submenu expandido Linha separadora

142  2005 Pearson Education, Inc. All rights reserved. 142 Outline MenuFrame.java (1 de 8)

143  2005 Pearson Education, Inc. All rights reserved. 143 Outline MenuFrame.java (2 de 8) Cria um JMenu Chama método JMenu setMnemonic Adiciona the JMenuItem “About…” ao fileMenu

144  2005 Pearson Education, Inc. All rights reserved. 144 Outline MenuFrame.java (3 de 8) Cria um ActionListener para processar eventos de ação em aboutItem Apresenta uma caixa de mensagem de dialogo Cria e adiciona o item de menu exitItem Registra um ActionListener que encerra a aplicação

145  2005 Pearson Education, Inc. All rights reserved. 145 Outline MenuFrame.java (4 de 8) Adiciona fileMenu ao JMenuBar e anexa o JMenuBar à janela da aplicação Cria menu formatMenu cria submenu colorMenu Cria array JRadioButtonMenuItem colorItems Cria um ButtonGroup para assegurar que apenas um dos itens de menu seja selecionado por vez Adiciona JRadioButtonMenuItem s ao colorMenu e registra ActionListener s

146  2005 Pearson Education, Inc. All rights reserved. 146 Outline MenuFrame.java (5 de 8) Chama método AbstractButton setSelected Adiciona colorMenu ao formatMenu e adiciona uma linha de separação horizontal Cria array de JRadioButtonMenuItem fonts Cria um ButtonGroup para assegurar que apenas um dos itens do menu sejam selecionados por vez Adiciona JRadioButtonMenuItem s ao colorMenu e registra ActionListener s Configura seleção default e adiciona separador horizontal

147  2005 Pearson Education, Inc. All rights reserved. 147 Outline MenuFrame.java (6 de 8) Cria JCheckBoxMenuItem s Adiciona fontMenu ao formatMenu e formatMenu ao JMenuBar

148  2005 Pearson Education, Inc. All rights reserved. 148 Outline MenuFrame.java (7 de 8) Determina o JRadioButtonMenuItem selecionado Método getSource retorna uma referência ao JRadioButtonMenuItem que gerou o evento

149  2005 Pearson Education, Inc. All rights reserved. 149 Outline MenuFrame.java (8 de 8) Chamado se o usuário seleciona um JCheckBoxMenuItem em fontMenu Determina se um ou os dois JCheckBoxMenuItem s estão selecionados

150  2005 Pearson Education, Inc. All rights reserved. 150  JTabbedPane •JTabbedPane – 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

151  2005 Pearson Education, Inc. All rights reserved. 151 Outline JTabbedPane Demo.java

152  2005 Pearson Education, Inc. All rights reserved. 152 Outline JTabbedPane Frame.java (1 de 2) Cria um JTabbedPane vazio com as configurações default Chama método JTabbedPane addTab 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

153  2005 Pearson Education, Inc. All rights reserved. 153 Outline JTabbedPane Frame.java (2 de 2) Adiciona panel2 ao tabbedPane Adiciona panel3 ao tabbedPane

154  2005 Pearson Education, Inc. All rights reserved. 154  JMenu e CardLayout •CardLayout – 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 154

155  2005 Pearson Education, Inc. All rights reserved. 155  JMenu e CardLayout •CardLayout – 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 155

156  2005 Pearson Education, Inc. All rights reserved. 156 CardLayoutTest.java // Arquivo: JTabbedPaneDemo.java // Demonstrando CardLayout. import javax.swing.JFrame; public class CardLayoutTest { public static void main( String args[] ) { CardLayoutDemo cardLayoutDemo = new CardLayoutDemo(); cardLayoutDemo.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); cardLayoutDemo.setSize( 300, 200 ); // define tamanho do frame cardLayoutDemo.setResizable(false); cardLayoutDemo.setVisible( true ); // apresenta frame } // fim do main } // fim da classe JGridLayoutBagDemo

157  2005 Pearson Education, Inc. All rights reserved. 157 CardLayoutTest.java // Arquivo CardLayoutDemo // Demonstração do CardLayout import java.awt.*; import java.awt.event.*; import javax.swing.*; public class CardLayoutDemo extends JFrame implements ActionListener { private JPanel cards; //um JPanel que usa CardLayout private JMenu menu; //menu principal Panel private JMenuItem buttonItem; //item do menu Panel private JMenuItem textItem; //item do menu Panel private JMenuBar bar; //barra de menu // Constantes usadas para identificar os JPanels (as Cards) final static String BUTTONPANEL = "Card with JButtons"; final static String TEXTPANEL = "Card with JTextField"; public CardLayoutDemo () { // Define o título do aplicativo super("Demo de CardLayout"); // Cria Menu Panel menu = new JMenu("Panel"); // Cria itens do menu Panel buttonItem = new JMenuItem(BUTTONPANEL); textItem = new JMenuItem(BUTTONPANEL); menu.add(buttonItem); menu.add(textItem); // Associa tratador de eventos aos itens do menu buttonItem.addActionListener(this); textItem.addActionListener(this); // Define a barra de menu com o menu Panel bar = new JMenuBar(); bar.add(menu); setJMenuBar( bar );

158  2005 Pearson Education, Inc. All rights reserved. 158 CardLayoutTest.java // Cria card de botões JPanel card1 = new JPanel(); card1.add(new JButton("Button 1")); card1.add(new JButton("Button 2")); card1.add(new JButton("Button 3")); // Cria card com campo de texto JPanel card2 = new JPanel(); card2.add(new JTextField("TextField", 20)); // Cria JPanel com layout CardLayout que conterá as cards cards = new JPanel(new CardLayout()); cards.add(card1, BUTTONPANEL); cards.add(card2, TEXTPANEL); // adiciona cards ao JFrame add(cards, BorderLayout.CENTER); } // Trata os eventos de seleção no menu Panel public void actionPerformed( ActionEvent event ) { // Obtém o Layout CardLayout do JPanel CardLayout cl = (CardLayout)(cards.getLayout()); // Apresenta o JPanel apropriado de acordo com a seleção no menu if (event.getSource() == buttonItem) cl.show(cards, BUTTONPANEL); else cl.show(cards, TEXTPANEL); }


Carregar ppt "1 COMPONENTES GUI (capítulo 11 Deitel) Roberto Willrich INE-CTC-UFSC Carla Merkle Westphall INE-CTC-UFSC URL:"

Apresentações semelhantes


Anúncios Google