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

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

COMPONENTES GUI (capítulo 11 Deitel)

Apresentações semelhantes


Apresentação em tema: "COMPONENTES GUI (capítulo 11 Deitel)"— Transcrição da apresentação:

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

2 Objetivos Neste capítulo aprenderemos:
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)
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 Internet Explorer com componentes GUI. 4

5 Entrada/Saída Simples Baseada em GUI comJOptionPane
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 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 6

7 Caixa de Dialogo: Caixa de Mensagem
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 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, showInputDialog 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

9 Constantes static JOptionPane para caixas de dialogo.
9 Constantes static JOptionPane para caixas de dialogo.

10 Visão Geral dos Componentes Swing
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 Alguns componentes gráficos básicos.
11 Alguns componentes gráficos básicos.

12 Swing vs. AWT Abstract Window Toolkit (AWT) Precursor do Swing
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 Tópico de portabilidade
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 Componentes GUI Leves vs. Pesados
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 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 Superclasses dos componentes GUI leves do Swing
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

17 Apresentação de Textos e Imagens em uma Janela
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 Nomeando componentes GUI
18 Nomeando componentes GUI Label Instruções ou informações textuais indicando o propósito de cada componentes Criado com a classe JLabel

19 Especificando o Layout
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 20 Resumo LabelFrame.java (1 de 2)

21 21 Resumo LabelFrame.java (2 de 2)

22 22 Resumo TesteLabel.java

23 Criando e anexando label1
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 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 Erro comum de programação
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 Criando e Anexando label2
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 Criando e Anexando label3
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 Criando e Anexando label2
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 Alguns componentes GUI básicos
29 Alguns componentes GUI básicos

30 Criando e Apresentando a janela LabelFrame
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 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 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 Cria um novo JTextField
33 Resumo FrameCampoDe Texto.java (1 de 3) Cria um novo JTextField

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

35 Outline Testa se a fonte do evento é o primeiro campo de texto
35 Outline Testa se a fonte do evento é o primeiro campo de texto Obtém texto do campo de texto FrameCampoDe Texto.java (3 de 3) Testa se a fonte do evento é o segundo campo de texto 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

36 36 Outline TesteCampoDe Texto.java (1 de 2)

37 37 Resumo TesteCampoDe Texto.java (2 de 2)

38 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 Usando uma classe aninhada para implementar um tratador de eventos
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 40 Observação Um classe interna pode acessar diretamente os atributos e métodos da classe externa, mesmo se eles são private.

41 Usando uma classe aninhada para implementar um tratador de eventos
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

42 Registrando o tratador de eventos para cada campo de texto
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 Erro comum de programação
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 Detalhes do método actionPerformed da classe TratadorCampoDeTexto
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 Tipos de eventos gráficos comuns e interfaces Listener
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 Algumas classes de evento do pacote java.awt.event.
46 Algumas classes de evento do pacote java.awt.event.

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

48 Invocação do tratamento de evento
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

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

51 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 Hierarquia do Botão Swing.
52 Hierarquia do Botão Swing.

53 JButton Botões de comando Criado com a classe JButton
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 Resumo FrameBotao.java (1 de 2) Declara dois atributos JButton
54 Resumo FrameBotao.java (1 de 2) Declara dois atributos JButton Cria novo JButton Cria dois ImageIcons Cria novo JButton Define rollover icon para JButton

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

56 56 Resumo TesteBotao.java (1 de 1)

57 JButton JButtons pode ter um ícone de alternância (rollover icon)
57 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 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 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 Botões que mantém um estado
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 60 JCheckBox JCheckBox Contém um rótulo que aparece na direita do check box por default Gera um ItemEvent quando este é clicado ItemEvents 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 Outline CheckBoxFrame .java (1 de 3) Declara dois atributos JCheckBox
61 Outline CheckBoxFrame .java (1 de 3) Declara dois atributos JCheckBox Define fonte do campo de texto

62 Outline Cria dois JCheckBoxes CheckBoxFrame .java (2 de 3)
62 Outline Cria dois JCheckBoxes CheckBoxFrame .java (2 de 3) Cria event handler Registra event handler nos JCheckBoxes Classe interna implementando ItemListener Método itemStateChanged é chamado quando um JCheckBox é clicado Testa se JCheckBox é selecionado

63 Método isSelected retorna se JCheckBox está selecionado
63 Outline Testa fonte do evento Método isSelected retorna se JCheckBox está selecionado CheckBoxFrame .java (3 de 3)

64 64 Outline CheckBoxTest .java

65 JRadioButton JRadioButton
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 Erro de programação comum
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 Declara quatro JRadioButtons e um ButtonGroup para gerenciar eles
67 Outline RadioButton Frame.java (1 de 3) Declara quatro JRadioButtons e um ButtonGroup para gerenciar eles

68 Outline RadioButton Frame.java (2 de 3) Cria quatro JRadioButtons
68 Outline RadioButton Frame.java (2 de 3) Cria quatro JRadioButtons Cria o ButtonGroup Adiciona cada JRadioButton ao ButtonGroup

69 Outline Registra um event handler a cada JRadioButton
69 Outline Registra um event handler a cada JRadioButton RadioButton Frame.java (3 of 3) 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 70 Outline RadioButtonTest .java

71 JComboBox e o uso de classe interna anônima para tratamento de eventos
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 Usando uma classe interna anônima para tratamento de eventos
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 Declara um atributo JComboBox
73 Outline ComboBoxFrame .java (1 of 2) Declara um atributo JComboBox

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

75 Outline ComboBoxTest .java 75
Barra de rolagem para visualizar itens na lista Setas de rolagem Caixa de rolagem

76 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 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 Declara um atributo JList
78 Outline ListFrame.java (1 of 2) Declara um atributo JList

79 Outline Cria JList ListFrame.java Define modo de seleção do JList
79 Outline Cria JList Define modo de seleção do JList ListFrame.java (2 de 2) Adiciona JList ao ScrollPane e o adiciona à aplicação Obtém índice do item selecionado

80 80 Outline ListTest.java

81 Lista de seleção múltipla
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 82 Outline Multiple SelectionFrame .java (1 de 3)

83 Usa uma lista de seleção de intervalo múltiplo
83 Outline Usa uma lista de seleção de intervalo múltiplo Multiple SelectionFrame .java (2 de 3) Usa método setListData e getSelectedValues para copiar de uma JList para a outra

84 Define modo de seleção para seleção de intervalo simples
84 Outline Define largura Multiple SelectionFrame .java (3 de 3) Define altura Define modo de seleção para seleção de intervalo simples

85 85 Outline Multiple SelectionTest .java

86 Tratamento de evento de mouse
Eventos de mouse: Cria um objeto MouseEvent. Tratado por MouseListeners e MouseMotionListeners. MouseInputListener combina as duas interfaces. A interface MouseWheelListener declara o método mouseWheelMoved para tratar MouseWheelEvents.

87 Métodos de interface MouseListener e MouseMotionListener. (Parte 1 de 2.)‏

88 Métodos de interface MouseListener e MouseMotionListener. (Parte 2 de 2.)‏

89 Resumo (1 de 4)‏ Cria JPanel para capturar eventos de mouse
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 Resumo Cria handler de evento para eventos de mouse
Registra um handler de evento MouseTracker Frame.java (2 de 4)‏ Implementa interfaces ouvintes de mouse Declara o método mouseClicked Determina a localização do clique de mouse Declara o método mousePressed Declara o método mouseReleased

91 Resumo Declara o método mouseEntered
MouseTracker Frame.java (3 de 4)‏ Configura o segundo plano de JPanel Declara o método mouseExited Configura o segundo plano de JPanel

92 Resumo Declara o método mouseDragged (4 de 4)‏
MouseTracker Frame.java (4 de 4)‏ Declara o método mouseMoved

93 Resumo MouseTracker Frame.java (1 de 2)‏

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 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 Herdando MouseAdapter
Classe adaptadora para as interfaces MouseListener e MouseMotionListener. Estender a classe permite sobrescrever somente os métodos que você deseja utilizar.

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 Classes adaptadoras de evento e as interfaces que elas implementam no pacote java.awt.event.

99 Registra um handler de evento
Resumo MouseDetails Frame.java (1 de 2)‏ Registra um handler de evento

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 clicado Testa se o botão do meio do mouse foi clicado

101 Resumo MouseDetails .java (1 de 2)‏

102 Tabela de Tratamento de Eventos
Origem Evento Listener JTextField JPasswordField Jbutton ActionEvent ActionListener actionPerformed(ActionEvent e) JCheckBox JRadioButton ItemEvent ItemListener itemStateChanged(ItemEvent e) JList ListSectionEvent ListSelectionListener valueChanged(ListSelectionEvent e) Subclasses de java.awt.Component MouseEvent MouseListener mouseClicked(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) MouseMotionEvent MouseMotionListener mouseDragged(MouseEvent e) mouseMoved(MouseEvent e) KeyEvent KeyListener keyTyped(KeyEvent e) keyPressed(KeyEvent e) keyReleasead(KeyEvent e)

103 Tabela de Tratamento de Eventos
Origem Evento Listener Subclasses de java.awt.window WindowEvent WindowListener windowActivated(WindowEvent e) windowClosed(WindowEvent e) windowClosing(WindowEvent e) windowDeactivated(WindowEvent e) windowDeiconified(WindowEvent e) windowIconified(WindowEvent e) windowOpened(WindowEvent e) java.awt.Component FocusEvent FocusListener focusGained(FocusEvent e) focusLost(FocusEvent e) JScrollBar AdjustmentEvent AdjustmentListener adjustmentValueChanged( AdjustmentEvent e) JMenu MenuEvent MenuListener menuCanceled(MenuEvent e) menuDeselected(MenuEvent e) menuSelected(MenuEvent e)

104 Gerenciadores de Layout
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 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 Alguns Gerenciadores de Layout.
106 Alguns Gerenciadores de Layout.

107 FlowLayout FlowLayout Gerenciador de layout mais simples
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 Define layout da aplicação
108 Outline FlowLayoutFrame .java (1 de 3) Cria FlowLayout Define layout da aplicação

109 Outline Adiciona JButton; FlowLayout tratará posicionametno
109 Outline Adiciona JButton; FlowLayout tratará posicionametno FlowLayoutFrame .java (2 of 3) Define alinhamento a esquerda Ajusta layout Adiciona JButton; FlowLayout tratará o posicionamento Define alinhamento ao centro

110 Outline Reajusta alinhamento FlowLayoutFrame .java (3 de 3)
110 Outline Reajusta alinhamento FlowLayoutFrame .java (3 de 3) Adiciona JButton; FlowLayout tratará posicionamento Define alinhamento a direita Reajusta alinhamento

111 111 Outline FlowLayoutDemo .java

112 BorderLayout BorderLayout
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 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 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 Erro de programação comum
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 Outline BorderLayout Demo.java (1 de 2) 116 Espaço horizontal
Espaço vertical

117 117 Outline BorderLayout Demo.java (2 of 2)

118 Outline BorderLayout Frame.java (1 de 2) Declara atributo BorderLayout
118 Outline BorderLayout Frame.java (1 de 2) Declara atributo BorderLayout Cria BorderLayout Define layout Registra tratador de evento

119 Outline BorderLayout Frame.java
119 Outline BorderLayout Frame.java (2 de 2) Adiciona botões à aplicação usando constantes do gerenciador de layout Torna os botões invisíveis Torna os botões visíveis Atualiza layout

120 GridLayout GridLayout
120 GridLayout GridLayout Organização na forma de uma grade (linhas e colunas) Todo componente tem a mesma altura e largura

121 121 Outline GridLayoutDemo .java

122 Declara dois atributos GridLayout
122 Outline GridLayout Frame.java (1 de 2) Declara dois atributos GridLayout Cria GridLayout Configura layout

123 Adiciona botões ao JFrame
123 Outline Adiciona botões ao JFrame GridLayout Frame.java (2 de 2) Usa segundo layout Usa primeiro layout Atualiza layout

124 GridBagLayout Gerenciador do Layout GridBagLayout
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 GridBagLayout (Cont.) Tela é dividida em linhas e colunas
125 GridBagLayout (Cont.) Tela é dividida em linhas e colunas representando as células que serão ocupadas pelos componentes; 1 2 3 1 2 3 4 5

126 GridBagLayout (Cont.) Método importante da classe GridBagLayout
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.

127 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 GridBagLayout (Cont.) gridx gridy gridwidth gridheight weightx weighty
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 GridBagLayout (Cont.) Um método útil para simplificar o entendimento
129 GridBagLayout (Cont.) Um método útil para simplificar o entendimento Sendo constraints = new GridBagConstraints();

130 GridBagLayout (Cont.) Exemplo de construção da interface
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 GridBagLayout (Cont.) Exemplo de construção da interface
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 GridBagLayout (Cont.) Insets(int top, int left, int bottom, int right)
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 GridBagLayout (Cont.) Insets(int top, int left, int bottom, int right)
133 GridBagLayout (Cont.) Insets(int top, int left, int bottom, int right) constraints.insets = new Insets(20, 12, 15, 25); 20 25 12 15

134 Usando Panels para gerenciar layouts mais complexos
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 Declara um JPanel para apresentar botões
135 Outline PanelFrame.java (1 de 2) Declara um JPanel para apresentar botões Cria JPanel Configura layout

136 Outline PanelFrame.java Adiciona o painel de botões (2 de 2)
136 Outline Adiciona o painel de botões PanelFrame.java (2 de 2) Adiciona painel à aplicação

137 137 Outline PanelDemo.java

138 Usando Menus com Frames
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 Usando Menus com Frames (Cont.)
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 JCheckBoxMenuItems Quando vários JRadioButtonMenuItems 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 Outline MenuTest.java (1 de 2) 140 Menu Caracteres mnemônicos
Barra de menu

141 Outline MenuTest.java (2 de 2) 141 Submenu expandido Menu items Linha
separadora

142 142 Outline MenuFrame.java (1 de 8)

143 Outline MenuFrame.java (2 de 8) Cria um JMenu
143 Outline MenuFrame.java (2 de 8) Cria um JMenu Chama método JMenu setMnemonic Adiciona the JMenuItem “About…” ao fileMenu

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

145 Adiciona fileMenu ao JMenuBar e anexa o JMenuBar à janela da aplicação
145 Outline MenuFrame.java (4 de 8) 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 JRadioButtonMenuItems ao colorMenu e registra ActionListeners

146 Outline Chama método AbstractButton setSelected MenuFrame.java
146 Outline Chama método AbstractButton setSelected MenuFrame.java (5 de 8) 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 JRadioButtonMenuItems ao colorMenu e registra ActionListeners Configura seleção default e adiciona separador horizontal

147 Outline MenuFrame.java (6 de 8) Cria JCheckBoxMenuItems
147 Outline MenuFrame.java (6 de 8) Cria JCheckBoxMenuItems Adiciona fontMenu ao formatMenu e formatMenu ao JMenuBar

148 Outline MenuFrame.java (7 de 8)
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 Outline MenuFrame.java (8 de 8)
149 Outline MenuFrame.java (8 de 8) Chamado se o usuário seleciona um JCheckBoxMenuItem em fontMenu Determina se um ou os dois JCheckBoxMenuItems estão selecionados

150 JTabbedPane JTabbedPane
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 151 Outline JTabbedPane Demo.java

152 Outline JTabbedPane Frame.java (1 de 2)
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 Outline JTabbedPane Frame.java (2 de 2) Adiciona panel2 ao tabbedPane
153 Outline JTabbedPane Frame.java (2 de 2) Adiciona panel2 ao tabbedPane Adiciona panel3 ao tabbedPane

154 JMenu e CardLayout CardLayout
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

155 JMenu e CardLayout CardLayout Método show()
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

156 CardLayoutTest .java 156 // 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 156 CardLayoutTest .java

157 CardLayoutTest .java 157 // 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 ); 157 CardLayoutTest .java

158 CardLayoutTest .java 158 // 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); 158 CardLayoutTest .java


Carregar ppt "COMPONENTES GUI (capítulo 11 Deitel)"

Apresentações semelhantes


Anúncios Google