Computação Gráfica I CRAb – Grupo de Computação Gráfica Departamento de Computação UFC.
L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF...
Transcript of L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF...
LINGUAGEM DE PROGRAMAÇÃO III
Profa. Cintia Carvalho OliveiraBa. Ciência da Computação - UFJF
Mestre em Ciência da Computação - UFU
INTERFACE GRÁFICA
GUI – Graphical User Interface Java possui duas bibliotecas gráficas:
AWT (Abstract Window Toolkit) Swing
Utilizaremos a biblioteca javax.swing
import javax.swing.JFrame; //importação da classe JFramepublic class PrimeiroSwing {
JFrame janela = new JFrame(); //criamos um JFrame chamado 'janela'
public static void main (String args[]){new PrimeiroSwing();
}
private PrimeiroSwing(){janela.setTitle("Primeira Aplicação Gráfica"); //definimos o título da janela
janela.setSize(350, 150); //definimos a largura e a altura da janela
janela.setLocation(50, 50); //define a posição da janela na tela
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//define que ao fechar a janela, encerre a aplicação
janela.setVisible(true); //mostramos a janela
}}
CENTRALIZAR A JANELA
Toolkit tk = Toolkit.getDefaultToolkit(); Dimension d = tk.getScreenSize();
int x = (d.width/ 2 ) – (350/2); int y = (d.height/2) – (150/2);
Janela.setLocation(x, y);
CRIANDO UM BOTÃO
Depois da definição do Jframe JButton botao = new JButton("OK");
Dentro do JFrame, após a configuração do fechamento: janela.add(botao);
LAYOUT E FECHAMENTO
O botão ocupou todo o espaço do JFrame pois não possui um layout.
O método setDefautCloseOperation() foi usado para o fechamento da janela: (JFrame.EXIT_ON_CLOSE) – encerra a aplicação (JFrame.HIDE_ON_CLOSE) – esconde a janela (JFrame.DISPOSE_ON_CLOSE) – destroi a janela
mas a aplicação continua
GERENCIADORES DE LAYOUT
A GUI é formada por componentes que chamamos de contêineres: FlowLayout, GridLayout, BorderLayout e
CardLayout
Caso não tenha um gerenciador, o objeto inserido considera todo o contêiner como uma única célula.
FLOWLAYOUT
O mais simples. Componentes dispostos da direita para a
esquerda.
import java.awt.FlowLayout;
import javax.swing.*;
public class ExemploFlowLayout {
JFrame janela = new JFrame(); //criamos e instaciamos um JFrame chamado 'janela'
JPanel painel = new JPanel(); //criamos um JPanel chamado painel
JLabel rotulo = new JLabel("Seu nome: ");
//criamos um JLabel chamado rotulo e com o texto "Seu nome: "
JTextField texto = new JtextField(5); //criamos um JTextField chamado texto com o tamanho 5
JButton botao = new JButton("OK"); //criamos e instanciamos um JButton chamado 'botao' e com o texto "OK"
public static void main (String args[]){
new ExemploFlowLayout();
}
private ExemploFlowLayout(){
janela.setTitle("Exemplo de um FlowLayout"); //definimos o título da janela
janela.setSize(300, 100); //definimos a largura e a altura da janela
janela.setLocation(50, 50); //define a posição da janela na telajanela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//define que ao fechar a janela, encerre a aplicação
painel.setLayout(new FlowLayout(FlowLayout.CENTER, 30, 20)); //definimos o layout do painel
painel.add(rotulo); //adicionamos o rotulo ao painelpainel.add(texto); //adicionamos o texto ao painelpainel.add(botao); //adicionamos o botao ao paineljanela.add(painel); //adicionamos o painel à janela//mostramos a janelajanela.setVisible(true);}
}
GRIDLAYOUT
É um gerenciador que divide o contêiner em um conjunto de células de mesma dimensão.
A ordem de exibição é de acordo com a ordem de inserção.
nome-do-conteiner.setLayout(new GridLayout(linhas, colunas, espaçamentohorizontal, espaçamento-vertical)
import java.awt.GridLayout; import javax.swing.*; public class ExemploGridLayout { JFrame janela = new JFrame(); JPanel painel = new JPanel(); JLabel rotulo1 = new JLabel("Escolha uma fruta: "); JLabel rotulo2 = new JLabel("Escolha uma bebida: "); DefaultListModel listModel = new DefaultListModel(); JList lista = new JList(listModel); JComboBox combo = new JComboBox(); JButton botao = new JButton("OK"); public static void main (String args[]){
new ExemploGridLayout(); }
private ExemploGridLayout(){ janela.setTitle("Exemplo de um FlowLayout"); janela.setSize(300, 200); janela.setLocation(50, 50); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); painel.setLayout(new GridLayout(3, 2, 5, 1)); painel.add(rotulo1); listModel.addElement("Maçã"); listModel.addElement("Uva"); listModel.addElement("Pera"); painel.add(lista); painel.add(rotulo2);
combo.addItem("Água"); combo.addItem("Refrigerante"); combo.addItem("Suco"); painel.add(combo); painel.add(botao); janela.add(painel); janela.setVisible(true);
} }
BORDERLAYOUT
Divide o contêiner em cinco regiões: North (região superior) South (região inferior) West (região à esquerda) East (região à direita) Center (região central)
Ao adicionar o elemento indicamos a que região ele pertence. Permite somente um elemento por região.
Na ausência de elementos em alguma região, as outras ocupam o espaço.
import java.awt.BorderLayout; import javax.swing.*; public class ExemploBorderLayout {
JFrame janela = new JFrame(); JPanel painel = new JPanel(); JButton sul = new JButton("SUL"); JButton norte = new JButton("NORTE"); JButton leste = new JButton("LESTE"); JButton oeste = new JButton("OESTE"); JButton centro = new JButton("CENTRO");
public static void main (String args[]){
new ExemploBorderLayout(); }
private ExemploBorderLayout(){ janela.setTitle("Exemplo de um BoderLayout"); janela.setSize(300, 200); janela.setLocation(50, 50); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); painel.setLayout(new BorderLayout()); painel.add("North", norte); painel.add("South", sul); painel.add("East", leste); painel.add("West", oeste); painel.add("Center", centro); janela.add(painel); janela.setVisible(true);
} }
CARDLAYOUT
Pode agrupar diversos contêineres na forma de cartões. Apenas um contêiner é visível por vez.
import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class ExemploCardLayout implements ActionListener{
JFrame janela = new JFrame(); JPanel painel1 = new JPanel(); JPanel painel2 = new JPanel(); JLabel rotulo1 = new JLabel("Painel 1", JLabel.CENTER); JLabel rotulo2 = new JLabel("Painel 2", JLabel.CENTER); JPanel painelSelecao = new JPanel(); JButton botao1 = new JButton("Painel 1"); JButton botao2 = new JButton("Painel 2"); JPanel painelCard = new JPanel(); public static void main (String args[]){
new ExemploCardLayout(); }
private ExemploCardLayout(){ janela.setTitle("Exemplo de um CardLayout"); janela.setSize(300, 200); janela.setLocation(50, 50); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new BorderLayout()); painelSelecao.setLayout(new GridLayout(1,2)); painelSelecao.add(botao1); painelSelecao.add(botao2); painel1.add(rotulo1); painel2.add(rotulo2); painelCard.setLayout(new CardLayout()); painelCard.add(painel1, "p1"); painelCard.add(painel2, "p2");
janela.add("North", painelSelecao);
janela.add("East", painelCard);
botao1.addActionListener(this); botao2.addActionListener(this);
janela.setVisible(true);
}
public void actionPerformed(ActionEvent e){ CardLayout cl = (CardLayout) painelCard.getLayout(); if (e.getSource() == botao1){
cl.show(painelCard, "p1"); } if (e.getSource() == botao2){
cl.show(painelCard, "p2"); }
} }
TRATAMENTO DE EVENTOS
Desejamos interpretar as ações do usuário, para isso devemos implementar uma ou mais interfaces receptoras de eventos: ActionListener: clique em um botão, “enter” em
um campo; FocusListener: gerado quando um componente
recebe ou perde foco; MouseListener: gerado quando o mouse é
clicado, ou entra em um componente; WindowListener: gerado quando ocorre um
evento em janela; maximizar, minimizar, etc.
LISTENER E TRATAMENTO DO EVENTO
A interface ActionListener , exige um método actionPerformed, que trata o evento gerado.
O método addActionListener registra quais componentes serão observados.
import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class ExemploFlowLayout implements ActionListener{
JFrame janela = new JFrame(); JPanel painel = new JPanel(); JLabel rotulo = new JLabel("Seu nome: "); JTextField texto = new JTextField(5); JButton botao = new JButton("OK");
public static void main (String arg[]){
new ExemploFlowLayout(); }
private ExemploFlowLayout(){ janela.setTitle("Exemplo de um FlowLayout"); janela.setSize(300, 100); janela.setLocation(50, 50); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); painel.setLayout(new FlowLayout(FlowLayout.CENTER, 30, 20)); painel.add(rotulo); painel.add(texto); painel.add(botao); janela.add(painel); janela.setVisible(true); botao.addActionListener(this);
}
public void actionPerformed(ActionEvent e){ if (e.getSource() == botao){
JOptionPane.showMessageDialog(null, texto.getText()); }
} }
JBUTTON
MÉTODOS
import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class Botoes implements ActionListener{
JFrame janela = new JFrame(); JButton botao1 = new JButton(); JButton botao2 = new JButton();
public static void main (String args[]){
new Botoes(); }
public Botoes(){ janela.setSize(240,70); janela.setTitle("Exemplo de JButton"); janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); janela.setLayout(new GridLayout(1,2)); botao1.setText("Fechar"); botao2.setText("OK"); botao1.addActionListener(this); botao2.addActionListener(this); janela.add(botao1); janela.add(botao2); janela.setVisible(true);
}
public void actionPerformed(ActionEvent e){ if (e.getSource() == botao1){
System.exit(0); } if (e.getSource() == botao2){
JOptionPane.showMessageDialog(null, "Janela de botões"); }
} }