Você está na página 1de 15

Interface Gráfica de JAVA - Graphical User Interface (GUI)

Para que o usuário possa interagir com a aplicação é necessário que haja uma interface para que este acione as
funcionalidades do programa. JAVA fornece classes que são utilizadas para construir interfaces gráficas com usuário que
ajudam na interação deste com a máquina e deixam os programas mais robustos e elegantes.

• Existe uma infinidade de funcionalidades disponíveis nas bibliotecas de classes Java, destinadas a prover a
comunicação homem-máquina gráfica.
• Os elementos básicos necessários para criar um GUI residem em dois pacotes:
– java.awt: Abstract Windowing Toolkit (classes básicas);
– javax.swing: Swing Components - fornece melhores alternativas aos componentes definidos na classe java.awt.

É nestas classes onde encontramos classes de janelas, botões, menus, painéis, botões de opções, entre outros componentes,
que podem ser estendidos e utilizados em nossas aplicações.
Swing é mais flexível que java.awt porque é implementada toda em Java, enquanto que java.awt é implementada em código
nativo.

Uma interface gráfica em Java é baseada em dois elementos:


– Containers: servem para agrupar e exibir outros componentes
• JFrame
• JPanel
– Componentes:
• JLabel • JButton • JTextField • JScrollPane
• JCheckBox • JComboBox • JRadioButton • JList • JTable
• JMenuBar, JMenu e JmenuItem

Outros elementos importantes que também serão tratados são:


• JOptionPane: showMessageDialog e showConfirmDialog
• Layouts: FlowLayout, GridLayout, BorderLayout e GridBagLayout
• Tratamento de Eventos

Definindo uma janela é dada através da classe JFrame, que serve como container para outros componentes, como botões,
imagens ou painéis. O JFrame possui atributos que definem uma janela, como barra de título e borda. O JPanel é um container
simples que pode ser utilizado para acrescentar componentes em uma janela, que será utilizado mais tarde.

JFrame.

Exemplo 1: Instanciando um JFrame.

import javax.swing.*;

public class JanelaJFrame {


public static void main(String[] args){
JFrame janela = new JFrame("Minha Primeira Janela");
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //define o que fazer quando a janela for fechada
janela.setSize(800,600); //define o tamanho da janela
janela.setVisible(true); //exibe a janela
}
}

JLabel : Utilizado como rótulo para exibição de texto e ícones.

Exemplo 2: Montando uma interface com o JLabel.

import java.awt.*;
import javax.swing.*;
public class JanelaJFrame extends JFrame {
JLabel label1;
JLabel label2;
JLabel label3;
JLabel label4 = new JLabel("Rótulo 4", JLabel.CENTER);

public JanelaJFrame(){

label1 = new JLabel("Testando rótulos com JAVA"); texto no construtor

//texto com posição definida


label2 = new JLabel("Texto Centralizado", JLabel.CENTER);
/*getClass().getResource(arg) procura por um arquivo na pasta.
* ImageIcon é um objeto que armazena uma imagem*/
ImageIcon img = new ImageIcon(this.getClass().getResource("JAVA.png"));

//texto com imagem


label3 = new JLabel("JAVA - Interface Gráfica", img, JLabel.RIGHT);

Container pane = this.getContentPane(); //captura o painel do JFrame


pane.setLayout(new GridLayout(4, 1));define o layout do painel

pane.add(label1);
pane.add(label2);
pane.add(label3);
pane.add(label4);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 200);
this.setVisible(true);
}

public static void main(String[] args){


JanelaJFrame janela = new JanelaJFrame();
}
}

JTextField: Componente utilizado como campo de texto.

Exemplo 3: Instanciando e utilizando o JTextField.

import java.awt.*;
import javax.swing.*;

public class JanelaJFrame extends JFrame {

//caixa de texto com tamanho especificado


JTextField texto1 = new JTextField(10);
JTextField texto2 = new JTextField(25);

//caixa de texto com texto inicial


JTextField texto3 = new JTextField("ESCREVA SEU TEXTO AQUI!!", 30);

public JanelaJFrame(){

Container pane = this.getContentPane(); //captura o painel do JFrame


pane.setLayout(new FlowLayout(FlowLayout.LEFT)); //define o layout

pane.add(texto1);
pane.add(texto2);
pane.add(texto3);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(360, 150);
this.setVisible(true);
}

public static void main(String[] args){


JanelaJFrame janela = new JanelaJFrame();
}
}
JTextArea: Campos de texto que podem possuir mais de uma linha.
Exemplo 4: Utilização do JTextArea.
import java.awt.*;
import javax.swing.*;

public class JanelaJFrame extends JFrame {

//define o número de linhas e o número de colunas do JTextArea


JTextArea texto1 = new JTextArea(5, 30);

//coloca um texto inicial


JTextArea texto2 = new JTextArea("Comentários", 10, 30);

public JanelaJFrame(){

Container pane = this.getContentPane(); //captura o painel do JFrame


pane.setLayout(new FlowLayout(FlowLayout.CENTER)); //define o layout

pane.add(texto1);
pane.add(texto2);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(360, 320);
this.setVisible(true);
}

public static void main(String[] args){


JanelaJFrame janela = new JanelaJFrame();
}
}

JScrollPane: Painéis de rolagem que permitem que os componentes exibam mais conteúdo do que o espaço ocupado.
Exemplo 5: Mostrando o funcionamento do JScrollPane.

import java.awt.*;
import javax.swing.*;

public class JanelaJFrame extends JFrame {

//define o número de linhas e o número de colunas do JTextArea


JTextArea texto1 = new JTextArea(15, 30);

JScrollPane scrollpane = new JScrollPane(texto1); //Painel de Rolagem

public JanelaJFrame(){

Container pane = this.getContentPane(); //captura o painel do JFrame


pane.setLayout(new FlowLayout(FlowLayout.CENTER)); //define o layout

texto1.setLineWrap(true); //quebra de linha automática

//define a política de utilização da barra de rolagem horizontal


scrollpane.setHorizontalScrollBarPolicy(
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

//define a política de utilização da barra de rolagem vertical


scrollpane.setVerticalScrollBarPolicy(
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

pane.add(scrollpane);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(360, 320);
this.setVisible(true);
}

public static void main(String[] args){


JanelaJFrame janela = new JanelaJFrame();
}
}
JButton: Componente que representa um botão. Utilizado para executar comandos.

Exemplo 6: Utilizando o JButton.

import java.awt.*;
import javax.swing.*;

public class JanelaJFrame extends JFrame {


JButton button1 = new JButton("Abrir");
JButton button2 = new JButton("Novo");
JButton button3 = new JButton("Fechar");

public JanelaJFrame(){

Container pane = this.getContentPane(); //captura o painel do JFrame


pane.setLayout(new FlowLayout(FlowLayout.CENTER)); //define o layout

pane.add(button1);
pane.add(button2);
pane.add(button3);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300, 150);
this.setVisible(true);
}

public static void main(String[] args){


JanelaJFrame janela = new JanelaJFrame();
}
}

Experimento prático :

import java.awt.*;
import javax.swing.*;

public class JFrameLog extends JFrame{


private JLabel labelNome;
private JLabel labelSenha;
private JLabel labelComent;
private JTextField textNome;
//Cria campo de texto q exibe 1 caracter no lugar do texto digitado
//geralmente utilizado como campo de senha
private JPasswordField textSenha;
private JTextArea textComent;
private JButton buttonOk;
private JButton buttonCancelar;
private JScrollPane paneComent;

public JFrameLog(){

super("Exemplo prático - Interface Login");


//Rótulos
labelNome = new JLabel("Nome");
labelSenha = new JLabel("Senha");
labelComent = new JLabel("Comentário");
//Campos de Texto
textNome = new JTextField(25);
textSenha = new JPasswordField(25);
//define qual caracter será exibido
//no lugar do texto digitado
textSenha.setEchoChar('*');
textComent = new JTextArea(10, 25);
textComent.setLineWrap(true);
//Painel de rolagem
paneComent = new JScrollPane(textComent,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//Botões
buttonOk = new JButton("OK");
buttonCancelar = new JButton("Cancelar");
//Captura painel do JFrame
Container pane = this.getContentPane();
//define o layout
pane.setLayout(new FlowLayout(FlowLayout.LEFT));
//adiciona componentes ao painel

pane.add(labelNome);
pane.add(textNome);
pane.add(labelSenha);
pane.add(textSenha);
pane.add(labelComent);
pane.add(paneComent);
pane.add(buttonOk);
pane.add(buttonCancelar);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(310, 380);
this.setResizable(false); //não pode ter seu tamanho redefinido
this.setVisible(true);
}

public static void main(String[] args){


JFrameLog log = new JFrameLog();
}
}

JCheckBox: é um tipo de caixa de seleção.


Exemplo 7: Utilizando o JCheckBox.

import java.awt.*;
import javax.swing.*;
public class JFrameExemplo extends JFrame{
private JLabel label = new JLabel("Linguagem em que programo:");
private JCheckBox checkJava;
private JCheckBox checkCSharp;
private JCheckBox checkVB;
public JFrameExemplo(){
//O JCheckBox possui vários construtores:
checkJava = new JCheckBox("Java");
checkCSharp = new JCheckBox("CSharp");
checkVB = new JCheckBox("Visual Basic");

Container pane1 = this.getContentPane();


JPanel pane2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
JPanel pane3 = new JPanel(new FlowLayout(FlowLayout.CENTER));

pane1.setLayout(new GridLayout(2, 1));

pane2.add(label);
pane3.add(checkJava);
pane3.add(checkCSharp);
pane3.add(checkVB);

pane1.add(pane2);
pane1.add(pane3);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(310, 120);
this.setResizable(false); //formulário não pode ter seu tamanho
//redefinido
this.setVisible(true);
}

public static void main(String[] args){


JFrameExemplo exemplo = new JFrameExemplo();
}
}
JRadioButton: Tipo de caixa de opção.

Exemplo 8: Utilizando o JRadioButton.

import java.awt.*;
import javax.swing.*;

public class JFrameExemplo extends JFrame{


private JLabel label = new JLabel("Qual linguagem você tem mais conhecimento: ");

//JRadioButton possui os mesmos construtores de JCheckbox


private JRadioButton[] linguagem = new JRadioButton[3];

//o buttongroup agrupa componentes


//se o componentes possui o atributo Selected então
//apenas um componente dentro desse buttongroup poderá ter
//o estado Selected como verdadeiro

private ButtonGroup group = new ButtonGroup();

public JFrameExemplo(){

linguagem[0] = new JRadioButton("JAVA");


linguagem[1] = new JRadioButton("C#");
linguagem[2] = new JRadioButton("VB");

Container pane = this.getContentPane();

pane.setLayout(new GridLayout(4, 1));

pane.add(label);

for (int i = 0; i < linguagem.length; i++){


group.add(linguagem[i]);
pane.add(linguagem[i]);
}

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(310, 200);
this.setResizable(false); //formulário não pode ter seu tamanho redefinido
this.setVisible(true);

public static void main(String[] args){


JFrameExemplo exemplo = new JFrameExemplo();
}
}

JComboBox: Caixa de combinação que fornece uma lista drop-down e permite a escolha de apenas um item.

Exemplo 9: Utilizando o JComboBox

import javax.swing.*;

public class JFrameExemplo extends JFrame{

private JLabel labelMes = new JLabel("Informe o Mês:");


private JLabel labelAno = new JLabel("Informe o Ano:");
/*JComboBox apresenta uma lista drop-down com as opções.*/
private JComboBox comboMes = new JComboBox();
private JComboBox comboAno = new JComboBox();

public JFrameExemplo(){
super("Testando JComboBox");
Container pane1 = this.getContentPane();
pane1.setLayout(new GridLayout(2,1));

JPanel pane2 = new JPanel(new FlowLayout(FlowLayout.LEFT));


JPanel pane3 = new JPanel(new FlowLayout(FlowLayout.LEFT));

comboMes.addItem("JANEIRO"); comboMes.addItem("FEVEIRO");
comboMes.addItem("MARÇO"); comboMes.addItem("ABRIL");
comboMes.addItem("MAIO"); comboMes.addItem("JUNHO");
comboMes.addItem("JULHO"); comboMes.addItem("AGOSTO");
comboMes.addItem("SETEMBRO"); comboMes.addItem("OUTUBRO");
comboMes.addItem("NOVEMBRO"); comboMes.addItem("DEZEMBRO");

for (int i = 1990; i <= 2020; i++) comboAno.addItem(i);


comboAno.setEditable(true); //O texto da caixa pode ser alterado

pane2.add(labelMes);
pane2.add(comboMes);
pane3.add(labelAno);
pane3.add(comboAno);
pane1.add(pane2);
pane1.add(pane3);

//o método getItemAt(int) retorna o valor do item através do índice


//o índice é igual ao de um array, onde o primeiro item é igual a 0
System.out.println(comboMes.getItemAt(6) + "/" +
comboAno.getItemAt(18));

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(310, 120);
this.setResizable(false);
this.setVisible(true);

} public static void main(String[] args){


JFrameExemplo exemplo = new JFrameExemplo();
}
}

JList: Lista que agrupa itens que são selecionadas pelo usuário.

Exemplo 10: Utilizando o JList.

import java.awt.*;
import javax.swing.*;

public class JFrameExemplo extends JFrame{

//exemplo que cria um JList


private JList listEstados;
private JScrollPane scrollpane;

public JFrameExemplo(){
super("JList");

Container pane = this.getContentPane();

String[] estados = {"Amazonas", "Bahia", "Goiás",


"Rio de Janeiro", "Santa Catarina" ,
"São Paulo", "Sergipe", "Tocantins"};

//no construtor é passado um vetor com os itens


//que serão apresentados pelo JList
listEstados = new JList(estados);
scrollpane = new JScrollPane(listEstados);

pane.add(scrollpane);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(310, 150);
this.setResizable(false);
this.setVisible(true);
}
public static void main(String[] args){
JFrameExemplo exemplo = new JFrameExemplo();
}
}

JTable: Tabela utilizada para exibir dados. Bastante utilizada para representar os dados de um banco de dados.

Exemplo 11: Utilizando o JTable.

import java.awt.*;
import javax.swing.*;

public class JFrameExemplo extends JFrame{

//define a tabela como tendo 3 colunas


String[] coluna = {"Nome", "Cidade", "Estado"};

//os dados que serão exibidos na tabela


//a tabela possuirá o cabeçalho e 4 linhas
String[][] dados = {{"Eduardo Jorge", "Salvador", "Bahia"},
{"Gustavo Neves", "Caetité", "Bahia"},
{"Tarcísio Araújo", "Mutuípe", "Bahia"},
{"Rafael", "Campinas", "São Paulo"}
};
//Passe os arrays como parâmetro no construtor
//e o JTable define o seu modelo de acordo o
//array de coluna e o de dados
private JTable listEstados = new JTable(dados, coluna);
private JScrollPane scrollpane = new JScrollPane(listEstados);

public JFrameExemplo(){
super("JTABLE");

this.getContentPane().add(scrollpane);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(310, 150);
this.setVisible(true);

public static void main(String[] args){


JFrameExemplo exemplo = new JFrameExemplo();
}

Criando Barra de Menus

Para criação de de barras de menus é necessário a utilização de 3 componentes que trabalham em conjunto.

JMenuItem: Um item de menu;

JMenu: Container representado através de um menu drop-down que server para agrupar outros JMenu e componentes como
JMenuItem, separados entre outros;

JMenuBar: Container que agrupa um ou mais JMenu.

Exemplo 12: Utilizando o JMenuItem, JMenu e o JMenuBar.


import java.awt.*;
import javax.swing.*;

public class JFrameExemplo extends JFrame{

private JMenuItem menuItemAbrir = new JMenuItem("Abrir");


private JMenuItem menuItemNovo = new JMenuItem("Novo");
private JMenuItem menuItemSalvar = new JMenuItem("Salvar");
private JMenuItem menuItemFechar = new JMenuItem("Fechar");

private JMenuItem menuItemColar = new JMenuItem("Colar");


private JMenuItem menuItemCopiar = new JMenuItem("Copiar");
private JMenuItem menuItemRecortar = new JMenuItem("Recortar"); Figura 13: Interface com barra de menus

private JMenuItem menuItemSubstituir = new JMenuItem("Substituir");


private JMenuItem menuItemLocalizar = new JMenuItem("Localizar");

private JMenu menuArquivo = new JMenu("Arquivo");

private JMenu menuEditar = new JMenu("Editar");

private JMenuBar menuBar = new JMenuBar();

public JFrameExemplo(){
super("MENUS");
//adicona os JMenuItem no JMenu
menuArquivo.add(menuItemAbrir);
menuArquivo.add(menuItemNovo);
menuArquivo.add(menuItemSalvar);
menuArquivo.addSeparator();
menuArquivo.add(menuItemFechar);
menuEditar.add(menuItemColar);
menuEditar.add(menuItemCopiar);
menuEditar.add(menuItemRecortar);
menuEditar.addSeparator();
menuEditar.add(menuItemLocalizar);
menuEditar.add(menuItemSubstituir);
//adiciona o JMenu no JMenuBar
menuBar.add(menuArquivo);
menuBar.add(menuEditar);

this.setJMenuBar(menuBar); //atribui um JMenuBar para o frame


this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(310, 200);
this.setVisible(true);
}

public static void main(String[] args){


JFrameExemplo exemplo = new JFrameExemplo();
}
}

JOptionPane
showMessageDialog: Caixa de dialógo utilizada para exibir uma messagem para o usuário.
showConfirmDialog: Caixa de dialógio utilizada tanto para exibir uma messagem do usuário como para capturar
uma resposta do usuário.
Exemplo 13: utilizando o JOptionPane.

import javax.swing.*;
public class App1 {
private JPanel jPanel1;
public static void main(String[] args) {
JFrame janela = new JFrame("Minha Primeira Janela");

janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.setSize(400,300);//define o tamanho da janela
janela.setVisible(true);//exibe a janela
JOptionPane.showMessageDialog(null,"Botao Ok Pressionado");
JOptionPane.showConfirmDialog(null, "Deseja confirmar");
}
}
Definindo Layouts

Para definir os layouts é necessário utilizar classes que são conhecidas como gerenciadores de layout. Esses gerenciadores
definem a disposição dos componentes nos paineis.

FlowLayout: Layout de fluxo. Os componentes ficam na ordem em que foram inseridos, da esquerda para direita, e quando
acabar o espaço na linha, passam para a próxima linha.
Com o FlowLayout, defini-se o alinha dos componentes, se é centralizado, alinha a esquerda, entre outros.
O FlowLayout foi bastante utilizado nos exemplos deste material.

Exemplo 14: Utilizando FlowLayout.

import java.awt.*;
import javax.swing.*;

public class ExemploLayout {

public ExemploLayout(){
FlowLayout layout = new FlowLayout(FlowLayout.CENTER);

JPanel pane = new JPanel(layout);

pane.add(new JButton("Teste1"));
pane.add(new JButton("Teste2"));
pane.add(new JButton("Teste3"));
pane.add(new JButton("Teste4"));
pane.add(new JButton("Teste5"));
pane.add(new JButton("Teste6"));
pane.add(new JButton("Teste7"));
pane.add(new JButton("Teste8"));
pane.add(new JButton("Teste9"));

JFrame frame = new JFrame("Testanto Interface");

frame.setContentPane(pane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}

public static void main(String[] args){


ExemploLayout e = new ExemploLayout();
}

GridLayout: Arruma os componentes como uma tabela, com linhas e colunas. Os componentes são adicionados da esquerda
para direita, de cima para baixo.

Exemplo 15: Utilizando GridLayout

import java.awt.*;
import javax.swing.*;

public class ExemploLayout {

public ExemploLayout(){
/*um GridLayout com 4 linha e 3 colunas
* o GridLayout também pode especificar o intervalo veritical
* e horizontal entre as células*/
GridLayout layout = new GridLayout(4, 3);

//instancia um objeto do JPanel


JPanel pane = new JPanel(layout);

pane.add(new Label("Col 1 Lin 1"));


pane.add(new Label("Col 2 Lin 1"));
pane.add(new Label("Col 3 Lin 1"));
pane.add(new Label("Col 4 Lin 1"));
pane.add(new Label("Col 1 Lin 2"));
pane.add(new Label("Col 2 Lin 2"));
pane.add(new Label("Col 3 Lin 2"));
pane.add(new Label("Col 4 Lin 2"));
pane.add(new Label("Col 1 Lin 3"));
pane.add(new Label("Col 2 Lin 3"));
pane.add(new Label("Col 3 Lin 3"));
pane.add(new Label("Col 4 Lin 3"));

JFrame frame = new JFrame("Testanto Interface");

frame.setContentPane(pane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
}

public static void main(String[] args){


ExemploLayout e = new ExemploLayout();
}

BorderLayout: Gerenciador de Layout que divide o conteiner um 5 seções, norte, sul, leste, oeste, centro.

Exemplo 16: Utilizando o BorderLayout

import java.awt.*;
import javax.swing.*;

public class ExemploLayout {

public ExemploLayout(){

BorderLayout layout = new BorderLayout();

//instancia um objeto do JPanel


JPanel pane = new JPanel(layout);

/*quando o layout é do tipo border layout os componente


* são adicinados com a informação sobre sua localização no conteiner*/
pane.add(BorderLayout.CENTER, new JButton("Centro"));
pane.add(BorderLayout.NORTH, new JButton("Norte"));
pane.add(BorderLayout.SOUTH, new JButton("Sul"));
pane.add(BorderLayout.EAST, new JButton("Leste"));
pane.add(BorderLayout.WEST, new JButton("Weste"));

JFrame frame = new JFrame("Testanto Interface");

frame.setContentPane(pane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 250);
frame.setVisible(true);
}

public static void main(String[] args){


ExemploLayout e = new ExemploLayout();
}
}
GridBagLayout: Este é um gerenciador de layout bastante complexo. O GridBagLayout é uma extensão do GridLayout, onde
no GridBagLayout as linhas e as colunas podem ter tamanhos variados de acordo com a proporção definida. Para utilizar o
GridBagLayout é bom que fazer um rascunho na mão de como será o layout do formulário.
O GridBagLayout é utilizado em conjunto com o GridBagConstraints, onde é definido o posicionamento, dimensão e
alinhamento dos componentes no container.

Exemplo 17: Utilizando o GridBagLayout.

import java.awt.*;
import javax.swing.*;

public class ExemploLayout {

public ExemploLayout(){

GridBagLayout gridbag = new GridBagLayout();


GridBagConstraints constraints = new GridBagConstraints();

JPanel pane = new JPanel();

pane.setLayout(gridbag);

setConstraints(constraints, 0, 0, 1, 1, 20, 100);


/*restrição fill para definir em qual direção eles vão esticar*/
constraints.fill = GridBagConstraints.NONE;
a restrição anchor diz onde colocar o componente dentro da
célula
constraints.anchor = GridBagConstraints.WEST;
JLabel label1 = new JLabel("Nome");
/*define o posicionamento do componente no gridbag*/
gridbag.setConstraints(label1, constraints);
pane.add(label1);adiciona o componente

setConstraints(constraints, 1, 0, 1, 1, 80, 100);


constraints.fill = GridBagConstraints.HORIZONTAL;
JTextField text1 = new JTextField();
gridbag.setConstraints(text1, constraints); JFrame frame = new JFrame("Testanto Interface");
pane.add(text1);
frame.setContentPane(pane);
setConstraints(constraints, 0, 1, 1, 1, 0, 100); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
constraints.fill = GridBagConstraints.NONE; frame.setSize(300, 250);
constraints.anchor = GridBagConstraints.WEST; frame.setVisible(true);
JLabel label2 = new JLabel("Telefone"); }
gridbag.setConstraints(label2, constraints);
pane.add(label2); /*define o posicionamento dos componentes*/
private void setConstraints(GridBagConstraints gb, int gridx, int
setConstraints(constraints, 1, 1, 1, 1, 0, 100); gridy,
constraints.fill = GridBagConstraints.HORIZONTAL; int gridwidth, int gridheight,
JTextField text2 = new JTextField(); int weightx, int weighty){
gridbag.setConstraints(text2, constraints);
pane.add(text2); gb.gridx = gridx;coordenada horizontal célular
gb.gridy = gridy;coordenada vertical célular
setConstraints(constraints, 0, 2, 1, 1, 0, 100); gb.gridwidth = gridwidth; //quantas colunas o componente vai
constraints.fill = GridBagConstraints.NONE; ocupar
constraints.anchor = GridBagConstraints.WEST; gb.gridheight = gridheight;quantas linhas o componente vai
JLabel label3 = new JLabel("E-mail"); ocupar
gridbag.setConstraints(label3, constraints); gb.weightx = weightx; //define a proporção da coluna
pane.add(label3); gb.weighty = weighty; //define a proporção da linha

setConstraints(constraints, 1, 2, 1, 1, 0, 100); }
constraints.fill = GridBagConstraints.HORIZONTAL; public static void main(String[] args){
JTextField text3 = new JTextField(); ExemploLayout e = new ExemploLayout();
gridbag.setConstraints(text3, constraints); }
pane.add(text3); }
Tratamentos de Eventos

Um evento pode ser um movimento, um clique no mouse, o pressionamento de uma tecla, a seleção de um item em um menu,
a rolagem de um scrollbar e outros. Um mesmo componente pode ter vários ouvidores de eventos, desde que o ouvidor
compatível com o componente gráfico.

Listeners
 pacote Java.awt.event.
 Listeners são objetos de qualquer classe que implementem uma interface específica para o tipo de evento que deseja tratar.
Listeners são objetos de qualquer classe que implementem uma interface específica para o tipo de evento que deseja tratar.
Essa interface é definida para cada classe de eventos. Então para a classe de eventos java.awt.event.FocusEvent existe a
interface java.awt.event.FocusListener.

Tabela de Interface e Métodos


Interface Métodos
ActionListener actionPerformed(ActionEvent)
AdjustmentListener adjustmentValueChanged(AdjustmentEvent)
AWTEventListener EventDispatched(AWTEvent)
ComponentListener componentHidden(ComponentEvent)
componentMoved(ComponentEvent)
componentResized(ComponentEvent)
componentShow(ComponentEvent)
ContainerListener componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
FocusListener focusGained(FocusEvent)
focusLost(FocusEvent)
InputMethodListener caretPositionChanged(InputMthodEvent)
inputMethodTextChanged(InputMethodEvent)
ItemListener itemStateChanged(ItemEvent)
KeyListener keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
MouseListener mousePressed(MouseEvent)
mouseReleased(MouseEvent)
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
MouseMotionListener mouseDragged(MouseMotionEvent)
mouseMoved(MouseMotionEvent)
TextListener textValueChanged(TextEvent)
WindowListener windowOpened(WindowEvent)
windowActived(WindowEvent)
windowDeactivated(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)
windowClosing(WindowEvent)
windowClosed(WindowEvent)
Exemplo 18: Forma de tratar eventos 1.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ExemploEventos extends JFrame implements ActionListener{

private JButton buttonOk = new JButton("OK");


private JButton buttonCancelar = new JButton("Fechar");
/* Neste exemplo a própria classe implementa ActionListener
* Ela implementa o único método desta interface que é o ActionPerformed*/
public ExemploEventos(){

buttonOk.addActionListener(this);
buttonCancelar.addActionListener(this);

this.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
this.getContentPane().add(buttonOk);
this.getContentPane().add(buttonCancelar);

/*actionPerformed é método de ActionListener e responde a eventos


* de ação como um clique em um botão
* ActionEvent é uma classe que possue atributos e métodos
* para tratamento dos eventos em actionPerformed*/
public void actionPerformed(ActionEvent e){
if (e.getSource() == buttonOk)
JOptionPane.showMessageDialog(this,
"Você clicou em Ok!!!",
"Rafola", JOptionPane.INFORMATION_MESSAGE);

else if (e.getSource() == buttonCancelar)


System.exit(0);
}

public static void main(String[] args){


ExemploEventos exemplo = new ExemploEventos();

exemplo.setSize(200, 200);
exemplo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
exemplo.setVisible(true);
}
}

Exemplo 19: Forma de tratar eventos 2.


/*neste exemplo criamos uma classe que implementa a interface ActionListener*/

public class ExitClass implements ActionListener{


public void actionPerformed(ActionEvent e){
System.exit(0);
}
}

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ExemploEventos extends JFrame{

private JButton buttonCancelar = new JButton("Fechar");

public ExemploEventos(){

ExitClass eventExit = new ExitClass();

buttonCancelar.addActionListener(eventExit);

this.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
this.getContentPane().add(buttonCancelar);

public static void main(String[] args){


ExemploEventos exemplo = new ExemploEventos();

exemplo.setSize(100, 100);
exemplo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
exemplo.setVisible(true);
}
}

** Exemplo 20: Forma de tratar eventos 3.**


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ExemploEventos extends JFrame{

private JButton buttonCancelar = new JButton("Fechar");

public ExemploEventos(){

/*evento implementado na hora em que é vinculado ao componente*/


buttonCancelar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
sairActionPerformed(e);
}
});

this.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER));
this.getContentPane().add(buttonCancelar);
}

public static void main(String[] args){


ExemploEventos exemplo = new ExemploEventos();

exemplo.setSize(100, 100);
exemplo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
exemplo.setVisible(true);
}

public void sairActionPerformed(ActionEvent e){;


System.exit(0);
}
}