Interface Gráfica de JAVA

Propaganda
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
• JCheckBox
• JComboBox
• JRadioButton • JList
• JMenuBar, JMenu e JmenuItem
• JScrollPane
• JTable
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
private JMenuItem
private JMenuItem
private JMenuItem
menuItemAbrir = new JMenuItem("Abrir");
menuItemNovo = new JMenuItem("Novo");
menuItemSalvar = new JMenuItem("Salvar");
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
pane.add(new Label("Col
pane.add(new Label("Col
pane.add(new Label("Col
1 Lin 1"));
2 Lin 1"));
3 Lin 1"));
4 Lin 1"));
pane.add(new Label("Col
pane.add(new Label("Col
pane.add(new Label("Col
pane.add(new Label("Col
pane.add(new Label("Col
pane.add(new Label("Col
pane.add(new Label("Col
pane.add(new Label("Col
1 Lin 2"));
2 Lin 2"));
3 Lin 2"));
4 Lin 2"));
1 Lin 3"));
2 Lin 3"));
3 Lin 3"));
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);
pane.add(text1);
setConstraints(constraints, 0, 1, 1, 1, 0, 100);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.WEST;
JLabel label2 = new JLabel("Telefone");
gridbag.setConstraints(label2, constraints);
pane.add(label2);
setConstraints(constraints, 1, 1, 1, 1, 0, 100);
constraints.fill = GridBagConstraints.HORIZONTAL;
JTextField text2 = new JTextField();
gridbag.setConstraints(text2, constraints);
pane.add(text2);
JFrame frame = new JFrame("Testanto Interface");
frame.setContentPane(pane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 250);
frame.setVisible(true);
}
/*define o posicionamento dos componentes*/
private void setConstraints(GridBagConstraints gb, int gridx, int
gridy,
int gridwidth, int gridheight,
int weightx, int weighty){
setConstraints(constraints, 0, 2, 1, 1, 0, 100);
constraints.fill = GridBagConstraints.NONE;
constraints.anchor = GridBagConstraints.WEST;
JLabel label3 = new JLabel("E-mail");
gridbag.setConstraints(label3, constraints);
pane.add(label3);
gb.gridx = gridx;coordenada horizontal célular
gb.gridy = gridy;coordenada vertical célular
gb.gridwidth = gridwidth; //quantas colunas o componente vai
ocupar
gb.gridheight = gridheight;quantas linhas o componente vai
ocupar
gb.weightx = weightx; //define a proporção da coluna
gb.weighty = weighty; //define a proporção da linha
setConstraints(constraints, 1, 2, 1, 1, 0, 100);
constraints.fill = GridBagConstraints.HORIZONTAL;
JTextField text3 = new JTextField();
gridbag.setConstraints(text3, constraints);
pane.add(text3);
}
public static void main(String[] args){
ExemploLayout e = new ExemploLayout();
}
}
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
ActionListener
AdjustmentListener
AWTEventListener
ComponentListener
ContainerListener
FocusListener
InputMethodListener
ItemListener
KeyListener
MouseListener
MouseMotionListener
TextListener
WindowListener
Métodos
actionPerformed(ActionEvent)
adjustmentValueChanged(AdjustmentEvent)
EventDispatched(AWTEvent)
componentHidden(ComponentEvent)
componentMoved(ComponentEvent)
componentResized(ComponentEvent)
componentShow(ComponentEvent)
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
focusGained(FocusEvent)
focusLost(FocusEvent)
caretPositionChanged(InputMthodEvent)
inputMethodTextChanged(InputMethodEvent)
itemStateChanged(ItemEvent)
keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mouseDragged(MouseMotionEvent)
mouseMoved(MouseMotionEvent)
textValueChanged(TextEvent)
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);
}
}
Download