Componentes da Interface Gráfica
Deitel & Deitel – Cap. 12
Roberto C. S. Pacheco
Ricardo N. Rieke
[email protected]
[email protected]
Professor
Monitor
Interface Gráfica

A interface gráfica com o usuário (GUI – Graphical User
Interface) fornece um conjunto de componentes
facilitando primeiramente a utilização de determinada
aplicação;

O browser é um exemplo de GUI. Na janela, há uma
barra de menus que contém itens de menus
específicos oferecendo funcionalidades aos usuários;

As GUIs são construídas a partir de componentes GUI;

Um componente GUI é um objeto com o qual o usuário
interage através do mouse, do teclado ou de outra
forma de entrada, como o reconhecimento de voz;

Alguns componentes do Java podem ser vistos na
tabela a seguir:
Interface Gráfica
Componente
JLabel
JTextField
JButton
JCheckBox
JComboBox
JList
JPanel
Descrição
Área em que podem ser exibidos texto não-editável.
Área em que o usuário insere dados pelo teclado. Também
podem exibir informações.
Área em que aciona um evento quando o mouse é pressionado.
Componentes GUI que tem dois estados: selecionado ou não
selecionado
Lista de itens a partir do qual o usuário pode fazer uma seleção
clicando em um item da lista.
Área em que uma lista de itens é exibida, a partir da qual o
usuário pode fazer uma seleção clicando uma vez em qualquer
elemento da lista.
Container em que os componentes podem ser adicionados.
Interface Gráfica - Swing

As classes que criam os componentes GUI (vistos na tabela anterior)
fazem parte dos componentes GUI Swing do pacote javax.swing;

Esses componentes GUI se tornaram padrão em Java a partir da
versão 1.2 da plataforma Java;

A maior parte dos componentes Swing são escritos, manipulados e
exibidos completamente em Java;

Isso permite ao Swing manter uma aparência e um comportamento
uniforme em todas as plataformas;

Os componentes GUI originais do pacote Abstract Window Toolkit
java.awt (também chamado AWT) estão diretamente associados com
os recursos da interface gráfica da plataforma local. Assim, seu
comportamento depende do ambiente onde são executados (no
Windows, a interface se assemelha a aplicações Windows, no Apple a
Mac e assim por diante);
Interface Gráfica - Swing

Para utilizar efetivamente os componentes GUI, as hierarquias de
herança javax.swing e do java.awt devem ser compreendidas –
especificamente a classe Component, a classe Container e a classe
JComponent, que definem os recursos comuns à maioria dos
componentes Swing.

A classe JComponent é a superclasse para a maioria dos
componentes Swing. Essa classe define os atributos e comportamentos
comuns para todas as subclasses de JComponent.
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent

O Container é uma coleção de componentes.
Em aplicativos com JFrame (e em applets),
anexam-se os componentes ao painel de
conteúdo, que é objeto da classe Container.
Essa define os atributos e comportamentos para
todas as suas subclasses (ex: método add() –
adiciona componentes e método setLayout()
– gerencia leiautes.)
Interface Gráfica - Swing
 Os componentes Swing têm muitos recursos, incluindo:
 Uma aparência e um comportamento plugável, que podem ser
utilizados para personalizar um componente;
 Teclas de atalho (ou teclas mnemônicas), que dão acesso direto a
componentes GUI por teclado;
 Capacidades comuns de tratamento de eventos, para o caso em
que vários componentes GUI iniciam as mesmas ações em um
programa;
 Breves descrições da finalidade de um componente GUI (dicas de
ferramenta) que são exibidas quando o cursor do mouse é
posicionado sobre o componente por um breve instante;
 Suporte a tecnologias de auxílio ao deficiente físico, como leitores
de tela em braile para pessoas cegas;
 Suporte para exibir em diferentes idiomas.
Interface Gráfica - Swing

De um modo geral para que um componente tenha
comportamento quando este sofrer determinado evento os
passos abaixo devem ser seguidos:
1.
2.
3.
4.
5.
Criação de uma classe que estenda de JFrame ou JApplet;
Criação do componente visual;
Adição desse componente para um container;
Criação de uma classe interna (tratador de eventos) que
implemente determinado listener;
Registro do tratador de eventos ao listener através dos métodos
disponíveis nas instâncias dos componentes GUI.
Obs: Para os componentes que não possuem eventos
associados, somente os três primeiros passos são aplicáveis
(ex: JLabel).
Swing - JLabel




Os rótulos fornecem instruções de texto ou informações em
um GUI;
Os rótulos são definidos com a classe JLabel (uma
subclasse de JComponent);
O rótulo exibe uma única linha de texto somente de leitura,
uma imagem, ou ambos;
Os programas raramente alteram o conteúdo do rótulo,
após sua criação;
Swing – JLabel - Exemplo

Exemplo:

Solução:
desenvolver um aplicativo Java que apresente um label no
rodapé de uma tela, colocando um ícone no centro da tela, associado a uma
figura de sua escolha e indicando uma frase de dica para o usuário, que
aparecerá quando o mouse repousar sobre a figura.
1.
Criar uma classe pública (ex: LabelTeste) estendendo JFrame e contendo
um objeto de JLabel (para guardar o label) e um objeto de Icon (para
guardar o ícone com sua figura)
2.
No construtor de objetos da sua classe pública invoque a superclasse JFrame
(com o comando super(“texto com o título do frame”), passando
como parâmetro o título da tela que criará.
3.
No construtor crie uma instância da classe Container para configurar a GUI.
Ajuste o objeto de Container para o layout FlowLayout
4.
Inicialize o objeto de JLabel com setText (colocando seu texto), setIcon
(colocando
sua
figura),
setHorizontalTextPosition
e
setVerticalTextPosition para colocar no centro e no rodapé,
respectivamente e setToolTipText para colocar a dica.
5.
Adicione o objeto de JLabel à instância de Container e ajuste o tamanho
(setSize) e a visibilidade da janela que será criada (com setVisible)
6.
Na função main() crie uma instância de sua classe, chame o construtor e
encerre o programa com o método
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE).
JLabel - Exemplo
1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
4 public class LabelTeste extends JFrame {
5
private JLabel label;
6
private Icon icone = new ImageIcon( “java.jpg" );
7
// Configurando a GUI
8
public LabelTeste() {
9
super( "Testando JLabel" );
10
// Cria um container e define o modelo de layout (FlowLayout)
11
Container container = getContentPane();
12
container.setLayout( new FlowLayout() );
14
// JLabel sem argumentos no construtor
15
label = new JLabel();
16
label.setText("Label com ícone e texto com alinhamento de rodapé \"bottom\"" );
17
label.setIcon( icone );
18
label.setHorizontalTextPosition( SwingConstants.CENTER );
19
label.setVerticalTextPosition( SwingConstants.BOTTOM );
20
label.setToolTipText("Este é o label" );
21
container.add( label );
22
setSize( 360, 150 );
23
setVisible( true );
24
}
25
// Método principal da aplicação
26
public static void main( String args[] ) {
27
LabelTeste application = new LabelTeste();
28
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
29
}
30 } // final da clase
JLabel – Explicando o Exemplo
Linhas 5 e 6
private JLabel label;
private Icon icone = new ImageIcon( “java.jpg" );
São criados os objetos label (instância de JLabel) e o objeto icone (instância de Icon).
A classe Icon permite definir um ícone que poderá ser associado a vários componentes
Swing.
Linha 9
super( "Testando JLabel" ); :
A palavra reservada super indica a classe pai. Através dessa palavra pode-se acessar
atributos (quando públicos), métodos e construtores. Nesse exemplo, como a classe está
derivando de JFrame, super(String) é uma chamada ao construtor da classe JFrame
para redefinir o título que irá aparecer na janela.
Linha 11 e 12
Container container = getContentPane();
container.setLayout( new FlowLayout() );
Cria um container para adicionar os componentes Swing e define o Layout. Existem vários
modelos de Layout que serão discutidos na seção sobre Layout.
JLabel – Explicando o Exemplo
Linhas 15, 16 e 17
label = new JLabel();
label.setText("Label com ícone
label.setIcon( icone );
e texto com alinhamento de rodapé \"bottom\""
);
O objeto label é instanciado através do comando new e logo em seguida é utilizado os método
setText(String) para atribuir o conteúdo do label e setIcon(Icon) para atribuir o
ícone ao label.
Linhas 18 e 19
label.setHorizontalTextPosition( SwingConstants.CENTER );
label.setVerticalTextPosition( SwingConstants.BOTTOM );
Utiliza esses métodos para definir os alinhamentos horizontal
(setHorizontalTextPosition(int)) e vertical (setVerticalTextPosition(int)).
Nesse caso o texto será centralizado horizontalmente e na parte inferior. Utiliza para isso as
constantes definidas SwingConstants.CENTER e SwingConstants.BOTTOM.
Linhas 20 e 21
label.setToolTipText("Este é o label" );
container.add( label );
O método setToolTipText(String) permite definir o texto que irá aparecer quando o mouse for
posicionado sobre o label. Em seguida o label é adicionado para o container.
JLabel – Explicando o Exemplo
Linhas 22 e 23
setSize( 360, 150 );
setVisible( true );
O método setSize(int, int) permite definir o tamanho do frame (que será o
tamanho da janela) e setVisible(boolean) permite definir se o frame deve
ou não aparecer. O default é false.
Linhas 28
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
O método setDefaultCloseOperation(int) do objeto global “application”
permite definir uma forma de finalizar a aplicação quando se seleciona o ícone
superior direito (x). Caso esse método não seja chamado a janela poderá ser
fechada mas a aplicação continua na memória.
IMPORTANTE: note que até agora utilizamos System.exit(0) para finalizar
um programa. Nesse exemplo, a utilização dessa abordagem finalizaria a
aplicação logo após a janela ser apresentada. Portanto, torna-se necessária a
definição de determinada operação ao evento de clicar no ícone para fechamento
da janela.
Swing – JLabel - Exercício
 Exercício:
desenvolver um aplicativo Java que
apresente um label no topo (“TOP”) de uma tela,
colocando um ícone no rodapé da tela, associado
a uma figura de sua escolha e indicando uma
frase de dica para o usuário, que aparecerá
quando o mouse repousar sobre a figura.
Tratamento de Eventos






Eventos são mapeamentos da interação do usuário com o programa.
Essas interações permitem saber que ações o usuário realizou com os
periféricos do computador (mouse, teclado, etc.), que interferem no
programa.
O Objeto JLabel não possui eventos;
As GUIs são baseados em eventos, isto é, geram eventos quando o
usuário interage com a interface;
Algumas interações são: mover o mouse, clicar no mouse, clicar em um
botão, digitar um campo de texto, selecionar um item de menu, fechar
uma janela, etc;
Os eventos da GUI são enviados para o programa quando ocorre uma
interação com o usuário;
O mecanismo de tratamento de eventos possui três partes:

A origem do evento.


O objeto do evento.
O “ouvinte” (listener) do evento.
Tratamento de Eventos

A origem do evento é o componente GUI com o qual o
usuário interage;

O objeto evento encapsula as informações sobre o evento
que ocorreu. As informações incluem uma referência para
a origem do evento e quaisquer informações específicas
que possam ser requeridas pelo listener;

O listener recebe notificações de que um evento ocorreu
permitindo que este realize determinada ação;

O programador precisa executar duas tarefas para
processar um evento da GUI com o usuário em um
programa:

registrar um listener para determinado componente GUI;

Implementar um método de tratamento de evento, também
chamados de tratadores de eventos.
Tratamento de Eventos

Modelo de Classes de Eventos do pacote java.awt.event
java.lang.Object
java.util.EventObject
ActionEvent
ContainerEvent
AdjustmentEvent
FocusEvent
ItemEvent
PaintEvent
ComponentEvent
WindowEvent
java.awt.AWTEvent
InputEvent
KeyEvent
MouseEvent
Tratamento de Eventos

Interfaces listeners de eventos do pacote java.awt.event
ActionListener
Java.util.EventListener
O objeto listener de eventos “espera por” tipos
específicos de eventos (normalmente componentes
GUI) em um programa. O tratador de eventos é um
método chamado para responder a um tipo de
evento em particular. Cada interface listener de
eventos especifica um ou mais métodos de
tratamento de evento que devem ser definidos na
classe que implementa a interface listener de
eventos. As interfaces definem métodos abstratos, o
que faz com que uma classe que implementa uma
interface tenha que definir TODOS os seus métodos,
para que possa criar instâncias (caso contrário, a
classe fica abstrata).
Quando ocorre um evento, o componente GUI com o
qual o usuário interagiu notifica os ouvintes
registrados no programa, chamando um método de
tratamento de eventos apropriado a cada ouvinte.
AdjustmentListener
ComponentListener
ContainerListener
FocusListener
ItemListener
KeyListener
MouseListener
MouseMotionListener
TextListener
WindowListener
Tabela de Tratamento de Eventos
Origem
Evento
Listener
JTextField
JPasswordField
Jbutton
ActionEvent
ActionListener
JCheckBox
JRadioButton
ItemEvent
ItemListener
itemStateChanged(ItemEvent
e)
JList
ListSectionEvent
ListSelectionListener
actionPerformed(ActionEvent
e)
valueChanged(ListSelectionEve
nt e)
Subclasses de
java.awt.Compone
nt
MouseEvent
MouseListener
mouseClicked(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
Subclasses de
java.awt.Compone
nt
MouseMotionEvent
MouseMotionListener
mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
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)
Subclasses de
java.awt.Compon
ent
FocusEvent
FocusListener
focusGained(FocusEvent e)
focusLost(FocusEvent e)
JScrollBar
AdjustmentEven
t
AdjustmentListener
adjustmentValueChanged(
AdjustmentEvent e)
JMenu
MenuEvent
MenuListener
menuCanceled(MenuEvent e)
menuDeselected(MenuEvent e)
Swing - JButton

O botão é um componente em que o usuário clica para disparar uma
ação específica. O programa Java pode utilizar vários tipos de botões,
incluindo botões de comando, caixas de marcação, botões de
alternância e botões de opção.
javax.swing.JComponent
javax.swing.AbstracButton
Javax.swing.JButton
Javax.swing.ToggleButton
Javax.swing.JCheckBox

Javax.swing.JRadioButton
Todos os tipos de botão são subclasses de AbstractButton (pacote
javax.swing), que define muitos dos recursos comuns aos botões do
Swing.
Swing – JButton - Exemplo


Exemplo: desenvolver um aplicativo Java que apresente um botão associado a um ícone
(com figura de sua escolha) e indicando uma frase de dica para o usuário (ex: “pressione o
botão”), um botão de finalização do programa e um mecanismo de tratamento do evento
associado ao botão com o ícone (onde o tratamento seja apresentar uma nova tela, com uma
mensagem).
Solução:
1. Criar uma classe pública (ex: ExemploButton) estendendo JFrame e contendo dois
objetos de JButton (um para cada botão) e um objeto de Icon (para guardar o
ícone com sua figura) e dois objetos String (textos dos botões).
2. No construtor de objetos da sua classe pública invoque a superclasse JFrame, crie
uma instância da classe Container para configurar a GUI e use o layout
FlowLayout
3. Ainda no construtor crie os botões com o new JButton() passando texto e ícone
(para o primeiro) e apenas o texto (para o segundo).
4. Crie o primeiro botão com o new JButton() passando texto e ícone, utilize
setIcon(), para colocar o ícone no botão, setToolTipText() para colocar a
dica e setActionCommand() para associar a ação do tratamento de eventos.
Adicione o botão ao objeto de Container criado no construtor.
5. Crie o segundo botão com o new JButton() passando texto e setToolTipText()
para colocar a dica do segundo botão. Adicione o botão ao objeto de Container
criado no construtor.
6. Após criar os botões, crie um objeto da classe GerenciadorBotoes. Essa instância
será capaz de tratar os eventos associados aos botões. Adicione esse objeto aos
listeners dos eventos (addActionListener())
7. Implemente a classe privada GerenciadorBotoes, que deve implementar a classe
abstrata ActionListeners com o tratamento dos eventos associados aos botões.
Para isso, implemente os métodos getActionCommand() para cada botão.
JButton - Exemplo
1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
4
5 public class ExemploButton extends JFrame {
6
7
private JButton botao1, botao2;
8
private Icon cafe = new ImageIcon( “java.jpg" );
9
private String strIcone = "botão associado a uma imagem";
10 private String strFinalizar = "Finalizar";
11
12 // Configura a GUI
13 public ExemploButton() {
14
super( "Testando Botões" );
15
16
// Cria o container e atribui o layout
17
Container container = getContentPane();
18
container.setLayout( new FlowLayout() );
19
20
// Cria os botões
21
botao1 = new JButton( “Botão Java”, cafe );
22
botao1.setIcon(cafe);
23
botao1.setToolTipText("Pressione o botão");
24
25
container.add( botao1 );
26
botao2 = new JButton( strFinalizar );
27
botao2.setToolTipText("Finaliza o programa");
28
container.add( botao2 );
....
JButton - Exemplo
....
29
// Cria o objeto gestorBotoes (instância da classe interna ButtonHandler)
30
// para o uso no tratamento de eventos de botão
31
GerenciadorBotoes gestorBotoes = new GerenciadorBotoes();
32
botao1.addActionListener( gestorBotoes );
33
botao2.addActionListener( gestorBotoes );
34
35
setSize( 360, 150 );
36
setVisible( true );
37 }
38
39 // Classe interna para tratamento de evento de botão
40 private class GerenciadorBotoes implements ActionListener {
41
// Método de manipulação do evento
42
public void actionPerformed( ActionEvent event ) {
43
//Testa se o botão com a imagem foi pressionado
44
if (event.getSource() == botao1)
45
JOptionPane.showMessageDialog( null,
46
"Você pressionou um botão com imagem");
47
//Testa se o botão "Finalizar" foi pressionado
48
else if (event.getSource() == botao2)
49
System.exit(0);
50
}
51 } // fim da classe interna GerenciadorBotoes
52
53 // Método principal
54 public static void main(String args[]) {
55
ExemploButton application = new ExemploButton();
56
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
57 }
58
59 } // fim da classe ExemploButton
JButton – Explicando o Exemplo
Linhas 7 e 10
private JButton botao1, botao2;
private Icon cafe = new ImageIcon( “java.jpg" );
private String strIcone = "botão associado a uma imagem";
private String strFinalizar = "Finalizar";
São criados os objetos botao1 e botao2 (instância de JButton) , o objeto cafe
(instância de Icon) e duas strings. A classe Icon permite definir um ícone que poderá ser
associado a vários componentes Swing.
Linha 14
super( "Testando Botões" );
A palavra reservada super indica a classe pai. Através dessa palavra pode-se acessar
atributos (quando públicos), métodos e construtores. Nesse exemplo, como a classe está
derivando de JFrame, super(String) é uma chamada ao construtor da classe JFrame para
redefinir o título que irá aparecer na janela.
Linha 17 e 18
Container container = getContentPane();
container.setLayout( new FlowLayout() );
Cria um container para adicionar os componentes Swing e define o Layout. Existem vários
modelos de Layout que serão discutidos na seção sobre Layout.
JButton – Explicando o Exemplo
Linhas 21 até 28
botao1 = new JButton( “Botão Java”, cafe );
botao1.setIcon(cafe);
botao1.setToolTipText("Pressione o botão");
container.add( botao1 );
botao2 = new JButton( strFinalizar );
botao2.setToolTipText("Finaliza o programa");
container.add( botao2 );
Os objetos botao1 e botao2 são criados nas linhas 21 e 26. No primeiro utiliza-se o construtor onde é
informado o texto e o ícone (objeto “cafe”). Através do método setToolTipText(String) é definida a
dica irá aparecer quando o mouse é passado sobre o botão.
Cada botão para se tornar visível tem que ser adicionado para um determinado container.
Linhas 31 até 33
GerenciadorBotoes gestorBotoes = new GerenciadorBotoes();
botao1.addActionListener( gestorBotoes );
botao2.addActionListener( gestorBotoes );
Cria o objeto gestorBotoes (instância da classe interna GerenciadorBotoes) responsável por tratar o
evento do click sobre os botões e adiciona esse listerner através do método
addActionListener(ActionListener).
JButton – Explicando o Exemplo
Linhas 40 até 51
private class GerenciadorBotoes implements ActionListener {
// Método de manipulação do evento
public void actionPerformed( ActionEvent event ) {
//Testa se o botão com a imagem foi pressionado
if (event.getSource() == botao1)
JOptionPane.showMessageDialog( null,
"Você pressionou um com imagem");
//Testa se o botão "Finalizar" foi pressionado
else if (event.getSource() == botao2)
System.exit(0);
}
} // fim da classe interna GerenciadorBotoes
Interface: especificação de atributos e métodos que devem ser implementados por uma
determinada classe. Todos os métodos definidos na interface devem ser implementados na
classe, ou seja, se forem especificados dois métodos na interface a classe que implementar a
interface deve ter esses mesmos métodos.
A classe interna (esta classe está definida dentro de outra classe) GerenciadorBotoes é uma
classe que implementa uma interface (definição) ActionListener. Nessa interface existe
definido somente o método actionPerformed.
Tratamento de Eventos – Como funciona
botao1
gestorBotoes
Objeto de JButton. Ele
contém uma variável de
instância do tipo
EventListenerList
chamada listenerList,
que herdou da classe
JComponent.
listenerList
Esse objeto
GerenciadorBotoes
implementa ActionListener
e define o método
actionPerformed().
public void
acionPerformed(Action event)
{
// evento tratado aqui
}
Referência criada pela instrução
Botao1.addAcionListener(gestorBotoes)
Tratamento de Eventos – Como funciona

Como o tratador de eventos foi registrado?

Resposta: o registro se deu nos comandos:
botao1.addActionListener( gestorBotoes );
botao2.addActionListener( gestorBotoes );
Eles adicionaram o handler de Button (gestorBotoes) como
sendo um listener para os objetos botao1 e botao2.

Como o componente GUI sabe que deve chamar
actionPerformed() em vez de outro método de
tratamento de eventos?


Resposta: Cada JComponent suporta vários tipos de eventos (de
mouse, de teclas e outros). Quando ocorre um evento, ele é
despachado para os ouvintes de eventos do tipo apropriado. O
despacho do evento é simplesmente uma chamada ao método
de tratamento de eventos para cada ouvinte registrado para esse
tipo de evento.
Cada tipo de evento tem uma interface listener de eventos
correspondente. Por exemplo, ActionEvents são tratados por
ActionListeners, MouseEvents por MouseListeners (e
MouseMotionListeners) e KeyEvents por KeyListeners.
Tratamento de Eventos – Como funciona

Como o componente GUI sabe que deve chamar
actionPerformed() em vez de outro método de
tratamento de eventos?

Quando um evento é gerado por uma interação do usuário com
um componente, esse componente recebe um ID (Identificador)
de evento exclusivo, que especifica o tipo de evento que ocorreu.
O componente GUI utiliza o ID de evento para decidir o tipo de
ouvinte para o qual o evento deve ser despachado e o método a
chamar. No caso de um ActionEvent, o evento é despachado
para cada método actionPerformed de ActionListener
registrado (o único método na interface ActionListener). No
caso de um MouseEvent, o evento é despachado para cada
MouseListener registrado (ou MouseMotionListener,
dependendo do evento que ocorrer). O ID de evento do
MouseEvent determina qual dos sete métodos diferentes de
tratamento de eventos de mouse é chamado.

A lógica de toda essa decisão é tratada para o desenvolvedor
pelos componentes GUI.
JButton – Exercício
• Modifique o exemplo anterior para
que o mecanismo de tratamento do
evento associado ao botão com o
ícone apresente uma tela em que o
usuário entrará com uma frase de
sua escolha.
Swing – JTextField e JPasswordField

As classes JTextField e JPasswordField em Java
permitem que o usuário insira textos de uma única linha ou
simplesmente que um texto seja exibido em uma linha.

A classe JTPasswordField é utilizada para apresentação de
senhas, ou seja, com o texto escondido na interface.

Quando o usuário digita textos em objetos dessas classes e, em
seguida, pressionar Enter, ocorre um evento de ação no
aplicativo. Se o programa implementa um ouvinte de eventos
(listeners), esse processa o evento, podendo utilizar os textos
que estão nos objetos de JTextField ou JPasswordField no
momento em que ocorreu o evento no programa.

A classe JTextField estende a classe JTextComponent, que
fornece muitos recursos comuns para os componentes baseados
em texto do Swing. A classe JPasswordField estende a
classe JTextField e adiciona vários métodos específicos para
senhas.
Swing – JTextField e JPassword- Exemplo

Exemplo:

Solução:
desenvolver um aplicativo Java que apresente quatro campos de
edição, sendo um para o usuário colocar uma frase, outro para apresentar uma frase
editável, outro para apresentar um texto inalterável e um último para registrar senhas.
Trate os eventos associados ao acionamento da tecla enter em cada um desses campos
de edição.
1.
2.
3.
4.
5.
6.
Criar uma classe pública (ex: ExemploJTextField) estendendo JFrame e
contendo três objetos de JTextField (para guardar os campos de edição) e
um objeto de JPasswordField (para guardar o campo de senha)
No construtor de objetos da sua classe pública invoque a superclasse JFrame
(com o comando super(“texto com o título do frame”), passando
como parâmetro o título da tela que criará e crie um Container ajustando o
layout para FlowLayout
Inicialize o 1o objeto de JTextField com dimensão default (tamanho de 10),
o segundo com texto default (“digite seu texto aqui”), o terceiro com texto e
visibilidade default (com texto “campo de texto não editável” e tamanho 20) e o
quarto com texto default (“digite sua senha”), adicionando-os ao container.
Crie um gerenciador de eventos para campos de texto e adicione os quatro
objetos da sua classe aos listeners (usando addActionListener())
Implemente a classe privada com o gerenciamento dos eventos para os
botões.
Na função main() crie uma instância de sua classe, chame o construtor e
encerre o programa com o método
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE).
Swing – JTextField e JPasswordField
// Exemplo de JTextField
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ExemploJTextField extends JFrame {
private JTextField campoTexto1, campoTexto2, campoTexto3;
private JPasswordField campoSenha;
// configuração da GUI
public ExemploJTextField() {
super("Testando JTextField e JPasswordField");
Container container = getContentPane();
container.setLayout(new FlowLayout());
// constrói o 1o campo de texto com dimensões default
campoTexto1 = new JTextField(10);
container.add(campoTexto1);
// constrói o 2o campo de texto com texto default
campoTexto2 = new JTextField("Digite seu texto aqui:");
container.add(campoTexto2);
// constrói o 3o campo de texto com texto default e
// 20 elementos visíveis, sem tratador de eventos
campoTexto3 = new JTextField("Campo de texto não editável",20);
campoTexto3.setEditable(false);
container.add(campoTexto3);
// constrói o 4o campo de texto com texto default
campoSenha = new JPasswordField("Texto oculto");
container.add(campoSenha);
...
JTextField e JPasswordField - Exemplo
...
// registra os tratadores de evento
GerenciadorTextField gerenteTexto = new GerenciadorTextField();
campoTexto1.addActionListener(gerenteTexto);
campoTexto2.addActionListener(gerenteTexto);
campoTexto3.addActionListener(gerenteTexto);
campoSenha.addActionListener(gerenteTexto);
setSize(325,100);
setVisible(true);
}
public static void main(String args[]) {
ExemploJTextField programaTexto = new ExemploJTextField();
programaTexto.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//classe interna privativa para tratamento de eventos
private class GerenciadorTextField implements ActionListener {
//processa eventos de campos de texto
public void actionPerformed(ActionEvent evento) {
String texto = "";
// evento:Usuário pressiona ENTER no objeto de JTextField campoTexto1
if (evento.getSource() == campoTexto1)
texto = "campoTexto1: " + evento.getActionCommand();
// evento:Usuário pressiona ENTER no objeto de JTextField campoTexto2
else if (evento.getSource() == campoTexto2)
texto = "campoTexto2: " + evento.getActionCommand();
// evento:Usuário pressiona ENTER no objeto de JTextField campoTexto3
else if (evento.getSource() == campoTexto3)
texto = "campoTexto3: " + evento.getActionCommand();
// evento:Usuário pressiona ENTER no objeto de JPasswordField campoSenha
else if (evento.getSource() == campoSenha) {
JPasswordField senha = (JPasswordField) evento.getSource();
texto = "campoSenha: " + new String(campoSenha.getPassword());
}
JOptionPane.showMessageDialog(null,texto);
}
} // fim da classe interna privativa GerenciadorTextField
} // fim da classe ExemploJTextField
Swing – JCheckBox e JRadioButton


Para que o usuário interaja com um aplicativo Java,
existem diversos tipos de botões para cada situação de
interface.
Os componentes GUI Swing possuem três tipos de botões
de estado (que assumem valores ativados/desativados ou
verdadeiro/falso):
 JToggleButton – para barras de ferramentas
 JCheckBox – para interfaces de múltipla escolha
 JRadioButton – escolha única entre múltiplas alternativas
javax.swing.AbstracButton
Javax.swing.JButton
Javax.swing.ToggleButton
Javax.swing.JCheckBox
Javax.swing.JRadioButton
Swing – JCheckBox e JRadioButton - Exemplo

Exemplo: aplicativo Java que permita que o usuário digite uma frase
e veja sua sentença aparecer em negrito,
dependendo de sua escolha.

itálico ou em ambos,
Solução:
1.
Criar uma classe pública (ex: ExemploCheckBox) que tenha um
objeto de JTextField (para a frase) e dois objetos de JCheckBox
(uma para cada fonte que será escolhida)
2.
No construtor de objetos da classe pública criar uma instância da
classe Container para configurar a GUI.
3.
Ajustar o objeto de Container para o layout FlowLayout
4.
Inicializar o objeto de JTextField com a criação de uma instância,
passando a frase a ser modificada e usando setFont para ajustar a
fonte
5.
Inicializar os objetos de JCheckBox da classe com as legendas das
fontes e adicioná-los ao container
6.
Criar o gerenciador de CheckBox para o tratamento de eventos, com
sua classe interna de tratamento, onde são colocados os eventos de
troca de fontes.
Swing – JCheckBox e JRadioButton
// Exemplo de JCheckBox e JRadioButton
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ExemploCheckBoxRadio extends JFrame {
private
private
private
private
JCheckBox checkB, checkI;
JRadioButton rbotao1, rbotao2, rbotao3;
ButtonGroup grupoRadio;
JPanel painel1, painel2;
// Configura a GUI
public ExemploCheckBoxRadio() {
super( "Testando CheckBox e RadioButton" );
// Cria o container e atribui o layout
Container container = getContentPane();
container.setLayout( new FlowLayout() );
// Cria os painéis
painel1 = new JPanel();
painel2 = new JPanel();
// Cria os objetos CheckBox, adiciona para o painel e
// adiciona o painel para o container
checkB= new JCheckBox("Bold");
painel1.add(checkB);
checkI = new JCheckBox("Itálico");
painel1.add(checkI);
container.add(painel1);
...
Swing – JCheckBox e JRadioButton
// Cria os objetos RadioButton, adiciona para o painel e
//adiciona o painel para o container
rbotao1 = new JRadioButton("Plain", true);
painel2.add(rbotao1);
rbotao2 = new JRadioButton("Bold", false);
painel2.add(rbotao2);
rbotao3 = new JRadioButton("Itálico", false);
painel2.add(rbotao3);
container.add(painel2);
//Cria o relacionamento lógico entre os objetos JRadioButton
grupoRadio = new ButtonGroup();
grupoRadio.add(rbotao1);
grupoRadio.add(rbotao2);
grupoRadio.add(rbotao3);
//Registra os tratadores de evento
Gerenciador gerente = new Gerenciador();
checkB.addItemListener( gerente );
checkI.addItemListener( gerente );
rbotao1.addItemListener( gerente );
rbotao2.addItemListener( gerente );
rbotao3.addItemListener( gerente );
setSize( 300, 100 );
setVisible( true );
}
...
Swing – JCheckBox e JRadioButton
// Classe interna para tratamento de evento
private class Gerenciador implements ItemListener {
// Método de manipulação do evento
public void itemStateChanged( ItemEvent event ) {
//Testa qual objeto foi pressionado
if (event.getSource() == checkB) {
JOptionPane.showMessageDialog( null,
"O check box Bold foi selecionado" );
} else if (event.getSource() == checkI) {
JOptionPane.showMessageDialog( null,
"O check box Itálico foi selecionado" );
} else if ((event.getSource() == rbotao1) &&
(event.getStateChange() == ItemEvent.SELECTED)) {
JOptionPane.showMessageDialog( null,
"O radio button Plain foi selecionado" );
} else if ((event.getSource() == rbotao2) &&
(event.getStateChange() == ItemEvent.SELECTED)) {
JOptionPane.showMessageDialog( null,
"O radio button bold foi selecionado" );
} else if ((event.getSource() == rbotao3) &&
(event.getStateChange() == ItemEvent.SELECTED)) {
JOptionPane.showMessageDialog( null,
"O radio button Itálico foi selecionado" );
}
}
} // fim da classe interna Gerenciador
// Método principal
public static void main(String args[]) {
ExemploCheckBoxRadio application = new ExemploCheckBoxRadio();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}
} // fim da classe ExemploCheckBoxRadio


Swing – JComboBox - Exemplo
Exemplo: aplicativo Java que permita ao usuário
escolher itens relacionados
ComboBox distintos.
em
dois
componentes
Solução:
1.
2.
3.
4.
5.
6.
7.
Criar uma classe pública (ex: ExemploComboBox) que tenha
dois objetos JComboBox e um objeto do tipo Vector.
No construtor de objetos da classe pública criar uma instância
da classe Container para configurar a GUI.
Ajustar o objeto de Container para o layout FlowLayout
Adicionar alguns itens para o objeto ComboBox através do
método add() e definir o item selecionado por padrão
Adicionar esse primeiro ComboBox objeto para o container.
Adicionar uma lista de itens para o objeto do tipo Vector,
utilizar esse vetor na criação do segundo ComboBox e
adicionar este objeto ao container
Criar o gerenciador de ComboBox para o tratamento de
eventos, com sua classe interna de tratamento, onde deve ser
apresentado o conteúdo do texto quanto o item for
selecionado.
Swing – JComboBox
import
import
import
import
java.awt.*;
java.awt.event.*;
javax.swing.*;
java.util.*;
public class ExemploComboBox extends JFrame {
private JComboBox cbb = new JComboBox();
private JComboBox cbb1;
private Vector cor = new Vector();
// Configurando a GUI
public ExemploComboBox() {
super( "Testando JComboBox" );
// Cria um container e define o modelo de layout (FlowLayout)
Container container = getContentPane();
container.setLayout( new FlowLayout() );
// Adiciona os elementos para o primeiro Combo
cbb.addItem("Disciplina 1");
cbb.addItem("Disciplina 2");
cbb.addItem("Disciplina 3");
//Define o item que estará selecionado
cbb.setSelectedItem("Disciplina 2");
//Adiciona para o container
container.add( cbb );
//Preenche o vetor
cor.add("Verde");
cor.add("Amarelo");
cor.add("Azul");
cor.add("Branco");
Swing – JComboBox
//Cria um Combo utilizando o vetor
cbb1 = new JComboBox(cor);
//Adiciona para o container
container.add( cbb1 );
// registra os tratadores de evento
GerenciadorComboBox gerenteCB = new GerenciadorComboBox();
cbb.addItemListener(gerenteCB);
setSize( 300, 170 );
setVisible( true );
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private class GerenciadorComboBox implements ItemListener {
//processa eventos associados aos objetos ComboBox
public void itemStateChanged(ItemEvent evento) {
String texto = "";
if ((evento.getSource() == cbb) &&
(evento.getStateChange() == ItemEvent.SELECTED)){
JOptionPane.showMessageDialog(null,
"O elemento selecionado foi "+cbb.getSelectedItem());
}
}
} // fim da classe interna
// Método principal da aplicação
public static void main( String args[] ){
ExemploComboBox combobox = new ExemploComboBox();
}
}
// final da classe
Swing – JList - Exemplo

Exemplo: aplicativo Java que permita ao usuário
selecionar uma determinada cor de uma lista, que será
aplicada ao frame, alterando a cor de acordo com a cor
(item) selecionada.

Solução:
1.
Criar uma classe pública (ex: ExemploList) que tenha um
objeto JList, um array de Strings e um array do tipo Color
2.
No construtor da classe crie uma instância da classe
Container para configurar a GUI.
Ajustar o objeto de Container para o layout FlowLayout.
3.
4.
5.
6.
Criar o objeto JList utilizando o array com os nomes das cores
e definir o modo de seleção como simples.
Adicionar o objeto JList para o container
Criar o gerenciador para o tratamento de eventos onde ao ser
escolhido determinado item da lista seja alterada a cor do
frame. Utilize o método setBackground(Color) do objeto
Container.
Swing – JList
// Exemplo adaptado do Deitel & Deitel
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class ExemploList extends JFrame {
private JList listaCores;
private Container container;
private String nomeCores[] = { "Preto", "Azul", "Cyan",
"Cinza Escuro", "Cinza", "Verde", "Cinza Claro", "Magenta",
"Laranja", "Vermelho", "Branco", "Amarelo" };
private Color cores[] = { Color.black, Color.blue,
Color.cyan, Color.darkGray, Color.gray, Color.green,
Color.lightGray, Color.magenta, Color.orange,
Color.red, Color.white, Color.yellow };
// Configuração da GUI
public ExemploList() {
super("Testando JList");
// Obtém o painel e configura o layout
container = getContentPane();
container.setLayout( new FlowLayout() );
// Cria uma lista com os nomes das cores
// e define o tamanho máximo da lista para 5 elementos
listaCores = new JList( nomeCores );
listaCores.setVisibleRowCount( 5 );
Swing – JList
// Permite somente a seleção de uma únida linha
listaCores.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
// Adiciona um JScrollPane para permitir a rolagem
// horizontal e vertical
container.add( new JScrollPane( listaCores ) );
GerenciadorList gerenteList = new GerenciadorList();
listaCores.addListSelectionListener(gerenteList);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize( 350, 150 );
setVisible( true );
}
//Classe que gerencia os eventos
private class GerenciadorList implements ListSelectionListener {
// Método de manipulação do evento
public void valueChanged( ListSelectionEvent evento ) {
container.setBackground(cores[listaCores.getSelectedIndex()] );
}
} // fim da classe interna
public static void main( String args[] )
ExemploList lista = new ExemploList();
}
}
// final da classe
{
Swing – Menus







Os menus são parte integrante das GUIs;
Permite que a interface fique mais organizada;
Os menus podem ser anexados somente aos objetos das
classes que fornecem o método setJMenuBar(). Duas
dessas classes são JFrame e JApplet;
As classes utilizadas para definir menus são JMenuBar,
JMenuItem, JCheckBoxMenuItem e JRadioButtonMenuItem;
A classe JMenuBar contém os métodos necessários para
gerenciar uma barra de menus;
A classe JMenu contém os métodos necessários para
gerenciar menus;
Os menus contêm itens de menu e são adicionados à barra
de menus ou a outros menus como submenus;
Swing – Menus




A classe JItemMenu contém os métodos necessários para
gerenciar os itens dos menus;
O item de menu é um componente GUI pertencente ao
componente menu que quando selecionado realiza
determinada ação;
A classe JCheckBoxMenuItem contém os métodos
necessários para gerenciar itens de menu que podem ser
ativados ou desativados;
A classe JRadioButtonMenuItem contém os métodos
necessários para gerenciar itens de menu que também
podem ser ativados ou desativados.
Swing – Menus - Exemplo


Exemplo: desenvolver um aplicativo Java que apresente três menus:
Cadastro, Relatórios e Ajuda na barra superior da janela. O primeiro menu
deve possibilitar o cadastro de Paciente e Médicos e permitir que o sistema
seja finalizado. O terceiro menu deve ter um item que possibilite a visualização
de um tela com informações do sistema (Sobre).
Solução:
1.
2.
3.
4.
5.
6.
Criar uma classe pública (ex: ExemploMenu) estendendo JFrame e contendo
um objeto JMenuBar (barra de menus), três objetos JMenu (para receber os
menus) e quatro objetos JMenuItem (para receber os itens dos menus).
No construtor da classe atribua o título da janela (setTitle(String)) e crie
a barra de menu.
No construtor crie os menus, determine a letra que será anexada a tecla “Alt”
para possibilitar acesso rápido (setMnemonic(char)) e adicione para a barra
de menu.
Ainda no construtor crie os itens de menu e adicione para os menus
correspondentes.
Após criar os objetos crie um objeto da classe Gerenciador. Essa instância
será capaz de tratar os eventos associados ao item de menu que finaliza o
sistema e também ao item que apresentação a tela com as informações
(Sobre).
Adicione
esse
objeto
aos
listeners
dos
eventos
(addActionListener())
Implemente a classe privada Gerenciador, que deve implementar a interface
ActionListeners com o tratamento dos eventos associados aos itens de
menu. Para isso, implemente o método actionPerformed() para cada item.
Swing – Menus
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ExemploMenu extends JFrame {
private
private
private
private
private
private
JMenuBar barraMenu;
JMenu mCad, mRel, mAjuda;
JMenuItem iPac, iMed, iFim, iSobre;
String sistema = "Sistema de Gerenciamento de Clínicas";
String versao = "Versao 1.0";
String build = "(build 20030626)";
// Configura a GUI
public ExemploMenu() {
//Atribui o título para a janela
setTitle(sistema);
//Cria a barra de menus
barraMenu = new JMenuBar();
//Cria os menus e adiciona para a barra
mCad = new JMenu("Cadastro");
mCad.setMnemonic('C');
mRel = new JMenu("Relatórios");
mRel.setMnemonic('R');
mAjuda = new JMenu("Ajuda");
mAjuda.setMnemonic('A');
barraMenu.add(mCad);
barraMenu.add(mRel);
barraMenu.add(mAjuda);
...
O método setMnemonic(char)
permite definir o caracter de
atalho utilizado conjuntamente
com a tecla Alt
Swing – Menus
//Cria os itens de menu
iPac = new JMenuItem("Paciente");
iPac.setMnemonic('P');
iMed = new JMenuItem("Médico");
iMed.setMnemonic('M');
iFim = new JMenuItem("Finaliza");
iFim.setMnemonic('F');
iSobre = new JMenuItem("Sobre");
iSobre.setMnemonic('S');
//Adiciona os itens para o menu de Cadastro
mCad.add(iPac);
mCad.add(iMed);
mCad.addSeparator();
mCad.add(iFim);
//Adiciona o iten sobre para o menu Ajuda
mAjuda.add(iSobre);
// registra os tratadores de evento
Gerenciador gerente = new Gerenciador();
iPac.addActionListener(gerente);
iFim.addActionListener(gerente);
iSobre.addActionListener(gerente);
//Anexa a barra de menu a janela
setJMenuBar(barraMenu);
setSize(800,600);
setVisible(true);
//Configura para permitir o fechamento da aplicação
//quando a janela for fechada
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
....
Swing – Menus
private class Gerenciador implements ActionListener {
//processa eventos de campos de texto
public void actionPerformed(ActionEvent evento) {
if (evento.getSource() == iPac) {
//ExemploGridBagLayout cadastro = new ExemploGridBagLayout();
} else if (evento.getSource() == iFim) {
System.exit(0);
} else if (evento.getSource() == iSobre) {
JOptionPane.showMessageDialog( null,
sistema+"\n\n"+"
"+versao+" "+build+"\n\n",
"Sobre o sistema", JOptionPane.PLAIN_MESSAGE );
}
}
}
public static void main (String arg[]) {
ExemploMenu menuGeral = new ExemploMenu();
}
}
//Fim da classe ExemploMenu
Menus – Exercício
• Modifique o exemplo anterior inserindo
os menus e itens de menus referente ao
exercício sobre cadastro de estudantes,
disciplinas e turmas (essa classe tem
comportamento de Limite e já deve ser
implementada para possibilitar sua utilização
no exercício).
Swing - Gerenciadores de Layouts


Os gerenciadores de layout são fornecidos para organizar
componentes GUI em um container para que estes sejam
apresentados;
FlowLayout


BorderLayout


Organiza os componentes em cinco áreas: norte, sul, leste,
oeste e centro.
GridLayout


Coloca os componentes seqüencialmente (da esquerda para a
direita) na ordem em que foram adicionados.
Organiza os componentes em linhas e colunas.
BoxLayout

Permite que os componentes sejam organizados da esquerda
para a direita ou de cima para baixo em um container.
Swing - Gerenciadores de Layouts

CardLayout


GridBagLayout


Empilha componentes como uma pilha de cartas.
Semelhante a GridLayout mas permite que o tamanho de cada
componente varie e que estes possam ser definidos em
qualquer ordem.
Existe também a possibilidade de se indicar null para o tipo
de layout. Isso significa que nenhum dos gerenciadores
serão utilizados. Em função disso o posicionamento passa
a ser absoluto, dependente de plataforma e resolução de
vídeo. Deve então utilizar o método setBounds(x, y, width,
height), onde, x (deslocamento a partir da esquerda –
eixo x), y (deslocamento a partir do topo – eixo y),
width (tamanho) e height (altura).
Swing - GridBagLayout
 É o mais poderoso dos gerenciadores de layout;
 Os componentes adicionados para o layout podem
variar em tamanho, isto é, eles podem ocupar
múltiplas linhas e colunas;
 Podem ser adicionados em qualquer ordem;
 A tela é dividida em linhas e colunas representando
as células que serão ocupadas pelos componentes;
Swing - GridBagLayout
0
0
1
Linha
2
3
4
1
2
Coluna
3
Swing - GridBagLayout
 Duas classes são importantes para definição do
layout.
 GridBagConstraints
 Insets
 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)
Swing - GridBagLayout
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 a 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
Swing - GridBagLayout
 Insets
 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
Swing - GridBagLayout
container.add(lblNome, new GridBagConstraints
(0, 0, 1, 1, 0, 0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(30, 10, 0, 10), 0, 0)
Swing - GridBagLayout
container.add(edtNome, new GridBagConstraints
(1, 0, 3, 1, 0, 0 ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(30, 10, 0, 10), 0,0));
Swing – GridBagLayout - Exemplo


Exemplo: desenvolver um aplicativo Java que apresente uma interface GUI
possibilitando que o usuário informe os dados cadastrais de um paciente (Nome,
Endereço, Idade, CPF). Essa interface deve ainda possuir três botões um que apresenta
a relação de pacientes, um para confirmar as informações e outro para finalizar o janela.
Solução:
1.
Criar uma classe pública (ex: ExemploGridBagLayout) estendendo JFrame
e contendo quatro objetos JLabel (rótulos para identificação dos campos de
edição), quatro objetos JTextFiedl (campos de edição), três objetos
JButton (para os controle da interface), um objeto Container e um objeto
GridBagLayout (para definição do layout da interface).
2.
No construtor da classe atribuir o painel getContentPane() para o container
e configurar o layout.
3.
Adicionar cada componente JLabel, JTextEdit, JButton para o container
utilizando GridBagLayout().
4.
No construtor da classe atribuir o título da janela (setTitle(String)).
5.
Após adicionar os objetos para o layout criar um objeto da classe
GerenciadorGeral. Essa instância será capaz de tratar os eventos associados
ao botão que finaliza o sistema. Adicione esse objeto ao listener do evento
(addActionListener()).
6.
7.
Definir as configurações básicas tais como: título da janela
setTitle(String), setResizable(boolean), setSize(int, int) e
setVisible(boolean).
Implementar a classe privada GerenciadorGeral, que deve implementar a
interface ActionListeners com o tratamento dos eventos associados ao
botão que finaliza o sistema. Para isso, implemente o método
actionPerformed().
Swing – GridBagLayout
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ExemploGridBagLayout extends JFrame {
private final String strTitulo = "Cadastro de Pacientes";
//Cria os rótulos
private JLabel lblNome = new JLabel("Nome:");
private JLabel lblEndereco = new JLabel("Endereço:");
private JLabel lblIdade = new JLabel("Idade:");
private JLabel lblDocumento = new JLabel("CPF:");
//Cria
public
public
public
public
os campos de edição
JTextField edtNome = new JTextField();
JTextField edtEndereco = new JTextField();
JTextField edtIdade = new JTextField();
JTextField edtCPF = new JTextField();
//Cria os botões
private JButton btnConfirmar = new JButton("Confirmar");
private JButton btnCancelar = new JButton("Cancelar");
private JButton btnRelacaoPacientes = new JButton("Relação de Pacientes");
//Cria o container e o layout
private Container container = new Container();
private GridBagLayout layout = new GridBagLayout();
....
Swing – GridBagLayout
public ExemploGridBagLayout() {
//Configura o layout
container = getContentPane();
container.setLayout(layout);
//Adiciona os componentes ao container
//Rótulos e campos de edição
container.add(lblNome, new GridBagConstraints(0, 0, 1, 1, 0, 0
,GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(30, 10, 0, 10), 0, 0));
container.add(edtNome, new GridBagConstraints(1, 0, 3, 1, 0, 0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(30, 10, 0, 10), 0, 0));
container.add(lblEndereco, new GridBagConstraints(0, 1, 1, 1, 0, 0
,GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(10, 10, 0, 10), 0, 0));
container.add(edtEndereco, new GridBagConstraints(1, 1, 3, 1, 0, 0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(10, 10, 0, 10), 0, 0));
container.add(lblIdade, new GridBagConstraints(0, 2, 1, 1, 0, 0
,GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(10, 10, 0, 10), 0, 0));
container.add(edtIdade, new GridBagConstraints(1, 2, 1, 1, 0, 0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
new Insets(10, 10, 0, 10), 0, 0));
container.add(lblDocumento, new GridBagConstraints(0, 3, 1, 1, 0, 0
,GridBagConstraints.WEST, GridBagConstraints.NONE,
new Insets(10, 10, 0, 10), 0, 0));
container.add(edtCPF, new GridBagConstraints(1, 3, 2, 1, 0, 0
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 10, 0,
150), 0, 0));
....
Swing – GridBagLayout
//Botões
container.add(btnRelacaoPacientes, new GridBagConstraints(0, 4, 2, 1, 0, 0
,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
new Insets(100, 10, 17, 0), 0, 0));
container.add(btnConfirmar, new GridBagConstraints(2, 4, 1, 1, 0, 0
,GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(100, 127, 17, 0), 0, 0));
container.add(btnCancelar, new GridBagConstraints(3, 4, 1, 1, 0, 0
,GridBagConstraints.CENTER, GridBagConstraints.NONE,
new Insets(100, 0, 17, 10), 0, 0));
//Registra o tratador de eventos
GerenciadorGeral gerGeral = new GerenciadorGeral();
btnCancelar.addActionListener(gerGeral);
//Define as configurações gerais
setTitle(strTitulo);
setResizable(false);
setSize(500, 300);
setVisible(true);
}
private class GerenciadorGeral implements ActionListener {
public void actionPerformed(ActionEvent evento) {
if (evento.getSource() == btnCancelar)
System.exit(0);
}
}
public static void main (String par[]) {
ExemploGridBagLayout exemplo = new ExemploGridBagLayout();
}
}
Swing – Exemplo usando posição absoluta
import java.awt.*;
import javax.swing.*;
public class PosicaoAbsoluta extends JFrame {
private JLabel lblLNome = new JLabel("Nome:");
private JTextField txtLNome = new JTextField();
private JLabel lblLEndereco = new JLabel("Endereço:");
private JTextField txtLEndereco = new JTextField();
public PosicaoAbsoluta() {
super.setTitle("Exercício");
Container container = getContentPane();
container.setLayout(null);
O construtor do objeto Rectangle
é composto pelos seguintes
parâmetros:
Rectangle(x, y, width, height);
x: posição horizontal na tela
y: posição vertical na tela
width: comprimento
height: altura
lblLNome.setBounds(new Rectangle(35, 35, 100, 19));
txtLNome.setBounds(new Rectangle(101, 36, 300, 20));
container.add(lblLNome);
container.add(txtLNome);
lblLEndereco.setBounds(new Rectangle(35, 75, 100, 19));
txtLEndereco.setBounds(new Rectangle(101, 76, 300, 20));
container.add(lblLEndereco);
container.add(txtLEndereco);
setResizable(true);
setSize(520, 180);
setVisible(true);
}
public static void main (String args[]){
PosicaoAbsoluta posicao = new PosicaoAbsoluta();
posicao.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
Exercício
Alterar o sistema de cadastro de estudantes, disciplinas e
turmas para utilizar os componentes de interface gráfica, tanto
para entrada como para apresentação de informações.
Obs.: Como o exercício foi implementado utilizando o modelo
MVC, é necessário somente fazer alterações nas classes
limites, pois as regras de negócio estão implementadas nos
controladores.
Download

Swing - GridBagLayout