L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF...

28
LINGUAGEM DE PROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU

Transcript of L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF...

Page 1: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

LINGUAGEM DE PROGRAMAÇÃO III

Profa. Cintia Carvalho OliveiraBa. Ciência da Computação - UFJF

Mestre em Ciência da Computação - UFU

Page 2: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. 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

Page 3: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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

}}

Page 4: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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);

Page 5: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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);

Page 6: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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

Page 7: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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.

Page 8: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

FLOWLAYOUT

O mais simples. Componentes dispostos da direita para a

esquerda.

Page 9: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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();

}

Page 10: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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);}

}

Page 11: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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)

Page 12: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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(); }

Page 13: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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);

} }

Page 14: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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.

Page 15: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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(); }

Page 16: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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);

} }

Page 17: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

CARDLAYOUT

Pode agrupar diversos contêineres na forma de cartões. Apenas um contêiner é visível por vez.

Page 18: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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(); }

Page 19: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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);

}

Page 20: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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"); }

} }

Page 21: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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.

Page 22: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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.

Page 23: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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(); }

Page 24: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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()); }

} }

Page 25: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

JBUTTON

Page 26: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

MÉTODOS

Page 27: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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(); }

Page 28: L INGUAGEM DE P ROGRAMAÇÃO III Profa. Cintia Carvalho Oliveira Ba. Ciência da Computação - UFJF Mestre em Ciência da Computação - UFU.

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"); }

} }