This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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
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.
4
Internet Explorer com componentes GUI.
Botão Menus Barra de título Barra de menus Campo de texto
Barras de rolagem
5
2005 Pearson Education, Inc. All rights reserved.
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
6
2005 Pearson Education, Inc. All rights reserved.
6
Resumo
Adicao.java
(1 de 2)
1 // Arquivo: Adicao.java
2 // Programa Adicao que usa JOptionPane para entrada e saída.
3 import javax.swing.JOptionPane; // programa usa JOptionPane
4
5 public class Adicao
6 {
7 public static void main( String args[] )
8 {
9 // Obtém entradas do usuário a partir do diálogos de entrada JOptionPane
10 String primeiroNumero =
11 JOptionPane.showInputDialog( "Digite primeiro numero" );
12 String segundoNumero =
13 JOptionPane.showInputDialog( "Digite segundo numero" );
14
15 // converte entrada em String para um valor int para usar no cálculo
16 int numero1 = Integer.parseInt( primeiroNumero );
17 int numero2 = Integer.parseInt( segundoNumero );
18
19 int soma = numero1 + numero2; // adiciona os números
20
21 // Apresenta o resultado em uma janela de diálogo JOptionPane x
22 JOptionPane.showMessageDialog( null, "A soma é " + soma,
23 "Soma de dois inteiros", JOptionPane.PLAIN_MESSAGE );
24 } // fim do método main
25 } // fim da classe Adição
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
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
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.
9
Constantes static JOptionPane para caixas de dialogo.
Tipo de mensagens Icone Descrição
ERROR_MESSAGE
Um diálogo que indica um erro ao usuario.
INFORMATION_MESSAGE
Um diálogo com uma mensagem informacional para o usuário.
WARNING_MESSAGE
Um diálogo de advertência indicando um problema potencial.
QUESTION_MESSAGE
Um diálogo que questiona o usuário. Ela normalmente requer uma resposta, tal como clicar um botão Sim ou um Não.
PLAIN_MESSAGE sem icone
Um diálogo que contém uma mensagem, mas sem icone.
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.
Componente Descrição
JLabel Apresenta ícones e textos não editáveis.
JTextField Permite ao usuário digitar dados a partir do teclado. Ela pode também ser usada para apresentar texto editável ou não editável.
JButton Ativa um evento quando clicado com o mouse.
JCheckBox Componente GUI que pode estar no estado selecionado ou não selecionado.
JComboBox Fornece uma lista escamoteável de itens a partir da qual o usuário pode fazer uma seleção clicando um item ou possivelmente digitando na caixa.
JList Fornece uma lista de itens no qual o usuário pode fazer uma seleção clicando em qualquer item na lista. Vários elementos podem ser selecionados.
JPanel Fonece uma área na qual componentes podem ser colocados e organizados. Podem também ser usados como uma área de desenho para grafismos.
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 Components
• 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)
1 // Arquivo: LabelFrame.java
2 // Demonstrando a classe Jlabel.
3 import java.awt.FlowLayout; // especifica como componentes são arranjados
4 import javax.swing.JFrame; // prove as caracteristicas basicas da janela
5 import javax.swing.JLabel; // apresenta textos e imagens
6 import javax.swing.SwingConstants; // Constantes comuns usadas com Swing
7 import javax.swing.Icon; // interface usada para processar imagens
• 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
(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• 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
2005 Pearson Education, Inc. All rights reserved.
61
Outline
CheckBoxFrame.java
(1 de 3)
1 // Arquivo: CheckBoxFrame.java
2 // Criando botões JCheckBox.
3 import java.awt.FlowLayout;
4 import java.awt.Font;
5 import java.awt.event.ItemListener;
6 import java.awt.event.ItemEvent;
7 import javax.swing.JFrame;
8 import javax.swing.JTextField;
9 import javax.swing.JCheckBox;
10
11 public class CheckBoxFrame extends JFrame
12 {
13 private JTextField campoDeTexto; // apresenta texto com fonte definida
14 private JCheckBox boldJCheckBox; // para selecionar/não selecionar negrito
15 private JCheckBox italicJCheckBox; // para selecionar/não selecionar italic
16
17 // Construtor CheckBoxFrame adiciona JCheckBoxes ao JFrame
18 public CheckBoxFrame()
19 {
20 super( "Teste de JCheckBox" ); // define titulo
21 setLayout( new FlowLayout() ); // define frame layout
22
23 // Configura JTextField e define sua fonte
24 campoDeTexto = new JTextField( "Observe a troca do estilo da fonte", 20 );
25 campoDeTexto.setFont( new Font( "Serif", Font.PLAIN, 14 ) );
26 add( campoDeTexto ); // adiciona textField ao JFrame
11 comboBoxFrame.setSize( 350, 150 ); // define tamanho do frame 12 comboBoxFrame.setVisible( true ); // apresenta frame 13 } // fim do main
14 } // fim da classe ComboBoxTest
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)
1 // Arquivo: ListFrame.java
2 // Selecionando cores de uma JList.
3 import java.awt.FlowLayout;
4 import java.awt.Color;
5 import javax.swing.JFrame;
6 import javax.swing.JList;
7 import javax.swing.JScrollPane;
8 import javax.swing.event.ListSelectionListener;
9 import javax.swing.event.ListSelectionEvent;
10 import javax.swing.ListSelectionModel;
11
12 public class ListFrame extends JFrame
13 {
14 private JList colorJList; // lista apresentando as cores
15 private final String colorNames[] = { "Black", "Blue", "Cyan",
– Tratado por MouseListeners e MouseMotionListeners.
– MouseInputListener combina as duas interfaces.
– A interface MouseWheelListener declara o método mouseWheelMoved para tratar MouseWheelEvents.
87
2005 by Pearson Education do Brasil
Métodos de interface MouseListener e MouseMotionListener. (Parte 1 de 2.)
Métodos de interface MouseListener e MouseMotionListener
Métodos de interface MouseListener
public void mousePressed( MouseEvent event )
Chamado quando um botão do mouse é pressionado enquanto o cursor de mouse estiver sobre um componente.
public void mouseClicked( MouseEvent event )
Chamado quando um botão do mouse é pressionado e liberado enquanto o cursor do mouse pairar sobre um componente. Esse evento é sempre precedido por uma chamada para mousePressed.
public void mouseReleased( MouseEvent event )
Chamado quando um botão do mouse é liberado depois de ser pressionado. Esse evento sempre é precedido por uma chamada para mousePressed e um ou mais chamadas para mouseDragged.
public void mouseEntered( MouseEvent event )
Chamado quando o cursor do mouse entra nos limites de um componente.
88
2005 by Pearson Education do Brasil
Métodos de interface MouseListener e MouseMotionListener. (Parte 2 de 2.)
Métodos de interface MouseListener e MouseMotionListener public void mouseExited( MouseEvent event )
Chamado quando o cursor do mouse deixa os limites de um componente.
Métodos de interface MouseMotionListener
public void mouseDragged( MouseEvent event )
Chamado quando o botão do mouse é pressionado enquanto o cursor de mouse estiver sobre um componente e o mouse é movido enquanto o botão do mouse permanecer pressionado. Esse evento é sempre precedido por uma chamada para mousePressed. Todos os eventos de arrastar são enviados para o componente em que o usuário começou a arrastar o mouse.
public void mouseMoved( MouseEvent event )
Chamado quando o mouse é movido quando o cursor de mouse estiver sobre um componente. Todos os eventos de movimento são enviados para o componente sobre o qual o mouse atualmente está posicionado.
89
2005 by Pearson Education do Brasil
Resumo
MouseTrackerFrame.java
(1 de 4)
1 // Fig. 11.28: MouseTrackerFrame.java
2 // Demonstrando eventos de mouse.
3 import java.awt.Color;
4 import java.awt.BorderLayout;
5 import java.awt.event.MouseListener;
6 import java.awt.event.MouseMotionListener;
7 import java.awt.event.MouseEvent;
8 import javax.swing.JFrame;
9 import javax.swing.JLabel;
10 import javax.swing.JPanel;
11
12 public class MouseTrackerFrame extends JFrame
13 {
14 private JPanel mousePanel; // painel em que eventos de mouse ocorrerão
15 private JLabel statusBar; // rótulo que exibe informações sobre evento
16
17 // construtor MouseTrackerFrame configura GUI e
18 // registra handlers de evento de mouse
19 public MouseTrackerFrame()
20 {
21 super( "Demonstrating Mouse Events" );
22
23 mousePanel = new JPanel(); // cria painel
24 mousePanel.setBackground( Color.WHITE ); // configura cor de fundo
25 add( mousePanel, BorderLayout.CENTER ); // adiciona painel ao JFrame
26
27 statusBar = new JLabel( "Mouse outside JPanel" );
28 add( statusBar, BorderLayout.SOUTH ); // adiciona rótulo ao JFrame
29
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
Resumo
MouseTrackerFrame.java
(2 de 4)
30 // cria e registra listener para mouse e eventos de movimento de mouse
31 MouseHandler handler = new MouseHandler();
32 mousePanel.addMouseListener( handler );
33 mousePanel.addMouseMotionListener( handler );
34 } // fim do construtor MouseTrackerFrame
35
36 private class MouseHandler implements MouseListener,
37 MouseMotionListener
38 {
39 // handlers de evento MouseListener
40 // trata evento quando o mouse é liberado logo depois de pressionado
41 public void mouseClicked( MouseEvent event )
42 {
43 statusBar.setText( String.format( "Clicked at [%d, %d]",
44 event.getX(), event.getY() ) );
45 } // fim do método mouseClicked
46
47 // trata evento quando mouse é pressionado
48 public void mousePressed( MouseEvent event )
49 {
50 statusBar.setText( String.format( "Pressed at [%d, %d]",
51 event.getX(), event.getY() ) );
52 } // fim do método mousePressed
53
54 // trata evento quando mouse é liberado depois da operação de arrastar
55 public void mouseReleased( MouseEvent event )
56 {
57 statusBar.setText( String.format( "Released at [%d, %d]",
58 event.getX(), event.getY() ) );
59 } // fim do método mouseReleased
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
Resumo
MouseTrackerFrame.java
(3 de 4)
60
61 // trata evento quando mouse entra na área
62 public void mouseEntered( MouseEvent event )
63 {
64 statusBar.setText( String.format( "Mouse entered at [%d, %d]",
65 event.getX(), event.getY() ) );
66 mousePanel.setBackground( Color.GREEN );
67 } // fim do método mouseEntered
68
69 // trata evento quando mouse sai da área
70 public void mouseExited( MouseEvent event )
71 {
72 statusBar.setText( "Mouse outside JPanel" );
73 mousePanel.setBackground( Color.WHITE );
74 } // fim do método mouseExited
75
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
Resumo
MouseTrackerFrame.java
(4 de 4)
76 // MouseMotionListener event handlers
77 // trata evento MouseMotionListener
78 public void mouseDragged( MouseEvent event )
79 {
80 statusBar.setText( String.format( "Dragged at [%d, %d]",
81 event.getX(), event.getY() ) );
82 } // fim do método mouseDragged
83
84 // trata evento quanto usuário move o mouse
85 public void mouseMoved( MouseEvent event )
86 {
87 statusBar.setText( String.format( "Moved at [%d, %d]",
88 event.getX(), event.getY() ) );
89 } // fim do método mouseMoved
90 } // fim da classe MouseHandler interna
91 } // fim da classe MouseTrackerFrame
Declara o método mouseDragged
Declara o método mouseMoved
93
2005 by Pearson Education do Brasil
Resumo
MouseTrackerFrame.java
(1 de 2)
1 // Fig. 11.29: MouseTrackerFrame.java
2 // Testando MouseTrackerFrame.
3 import javax.swing.JFrame;
4
5 public class MouseTracker
6 {
7 public static void main( String args[] )
8 {
9 MouseTrackerFrame mouseTrackerFrame = new MouseTrackerFrame();
11 mouseTrackerFrame.setSize( 300, 100 ); // configura o tamanho do frame
12 mouseTrackerFrame.setVisible( true ); // exibe o frame
13 } // fim de main
14 } // fim da classe MouseTracker
94
2005 by Pearson Education do Brasil
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
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
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
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
Classes adaptadoras de evento e as interfaces que elas implementam no pacote java.awt.event.
• 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.
Gerenciador de layout
Descrição
FlowLayout Default para javax.swing.JPanel. Coloca componentes sequencialmente (da esquerda para a direita) na ordem em que são adicionados. Também é possível especificar a ordem dos componentes usando o método add do Container, que tem o Component e um índice inteiro (definindo a posição) como argumentos
BorderLayout Default para JFrames (e outras janelas). Arranja os componentes em cinco áreas: NORTH, SOUTH, EAST, WEST and CENTER.
GridLayout Arranja os componentes em linhas e colunas.
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)
1 // Arquivo: FlowLayoutFrame.java
2 // Demonstração do alinhamento de FlowLayout.
3 import java.awt.FlowLayout;
4 import java.awt.Container;
5 import java.awt.event.ActionListener;
6 import java.awt.event.ActionEvent;
7 import javax.swing.JFrame;
8 import javax.swing.JButton;
9
10 public class FlowLayoutFrame extends JFrame
11 {
12 private JButton leftJButton; // botão para configurar alinhamento a esquerda
13 private JButton centerJButton; // botão para configurar alinhamento ao centro
14 private JButton rightJButton; // botão para configurar alinhamento a direita
15 private FlowLayout layout; // objeto layout
16 private Container container; // container a configurar layout
17
18 // Configurar interface e registrar tratamento de eventos
19 public FlowLayoutFrame()
20 {
21 super( "FlowLayout Demo" );
22
23 layout = new FlowLayout(); // cria FlowLayout
24 container = getContentPane(); // obtém container para layout
25 setLayout( layout ); // define frame layout
26
Cria FlowLayout
Define layout da aplicação
109
2005 Pearson Education, Inc. All rights reserved.
109
Outline
FlowLayoutFrame.java
(2 of 3)
27 // configura leftJButton e registra listener
28 leftJButton = new JButton( "Left" ); // cria botão Left
29 add( leftJButton ); // adiciona botão Left button ao frame
30 leftJButton.addActionListener(
31
32 new ActionListener() // classe interna anônima
33 {
34 // processa evento em leftJButton
35 public void actionPerformed( ActionEvent event )
36 {
37 layout.setAlignment( FlowLayout.LEFT );
38
39 // realinha componentes anexados
40 layout.layoutContainer( container );
41 } // fim do método actionPerformed
42 } // fim da classe interna anônima
43 ); // fim de addActionListener
44
45 // configura centerJButton e registra listener
46 centerJButton = new JButton( "Center" ); // cria botão Center
47 add( centerJButton ); // adiciona botão Center ao frame
48 centerJButton.addActionListener(
49
50 new ActionListener() // classe interna anônima
51 {
52 // processa evento em centerJButton
53 public void actionPerformed( ActionEvent event )
54 {
55 layout.setAlignment( FlowLayout.CENTER );
56
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)
57 // realinha componentes anexados
58 layout.layoutContainer( container );
59 } // fim do método actionPerformed
60 } // fim da classe anônima interna
61 ); // fim de addActionListener
62
63 // configura botão rightJButton e registra listener
64 rightJButton = new JButton( "Right" ); // cria botão Right
65 add( rightJButton ); // adiciona botão Right ao frame
66 rightJButton.addActionListener(
67
68 new ActionListener() // classe interna anônima
69 {
70 // processa evento rightJButton
71 public void actionPerformed( ActionEvent event )
72 {
73 layout.setAlignment( FlowLayout.RIGHT );
74
75 // realinha componentes anexados
76 layout.layoutContainer( container );
77 } // fim do método actionPerformed
78 } // fim da classe interna anônima
79 ); // fim de addActionListener
80 } // fim do construtor FlowLayoutFrame
81 } // fim da classe FlowLayoutFrame
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
1 // Arquivo: FlowLayoutDemo.java
2 // Testando FlowLayoutFrame.
3 import javax.swing.JFrame;
4
5 public class FlowLayoutDemo
6 {
7 public static void main( String args[] )
8 {
9 FlowLayoutFrame flowLayoutFrame = new FlowLayoutFrame();
•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
BorderLayoutDemo.java
(1 de 2)
1 // Arquivo: BorderLayoutDemo.java
2 // Testando BorderLayoutFrame.
3 import javax.swing.JFrame;
4
5 public class BorderLayoutDemo
6 {
7 public static void main( String args[] )
8 {
9 BorderLayoutFrame borderLayoutFrame = new BorderLayoutFrame();
39 public void actionPerformed( ActionEvent event )
40 {
41 if ( toggle )
42 container.setLayout( gridLayout2 ); // configura layout para o secondo
43 else
44 container.setLayout( gridLayout1 ); // configura layout para o primeiro
45
46 toggle = !toggle; // inverte valor de toggle
47 container.validate(); // re-layout do container
48 } // fim do método actionPerformed
49 } // fim da classe GridLayoutFrame
Adiciona botões ao JFrame
Usa segundo layout
Usa 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;
0 1 2 3
0
123
4
5
126
2005 Pearson Education, Inc. All rights reserved.
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();
// Método para definir posicionamento e adição de componente
private void addComponent( Component component,
int linha, int coluna, int largura, int altura )
{
constraints.gridx = coluna; // set gridx
constraints.gridy = linha; // set gridy
constraints.gridwidth = largura; // set gridwidth
constraints.gridheight = altura; // set gridheight
layout.setConstraints( component, constraints ); // set constraints
add( component ); // adiciona componente
} // fim do método addComponent
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;
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
JTabbedPaneFrame.java
(2 de 2)
27 // configura panel2 e o adiciona JTabbedPane
28 JLabel label2 = new JLabel( "panel two", SwingConstants.CENTER );
29 JPanel panel2 = new JPanel(); // cria segundo painel
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 CardLayoutimport 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); } }