MESTRES DA CULTURA DE ASSARÉ Prof. Francisco Leite.pdf
Interface grafica
1. Interface gráfica em Java
Técnicas de Programação
Prof. Iális Cavalcante
Engenharia da Computação
2011.1
2. Introdução
GUI – graphical user interface
◦ Interface gráfica com o usuário
Fornece ao programa “aparência” e
comportamentos “diferenciados”:
◦ Nível básico de familiaridade com o
programa;
◦ Reduz tempo de aprendizado;
◦ Aumenta habilidade de uso produtivo do
programa.
3. Introdução
Componentes GUI em um browser:
Menu Barra de
menus
Botão Campo
de texto
Barra
de status
4. Introdução
Componentes GUI – interação através do mouse,
teclado, etc.
Exemplos:
◦ JLabel – área exibível para textos não-editáveis ou ícones;
◦ JTextField – área para exibição e inserção de dados através do
teclado;
◦ JButton – área que aciona um evento após clique do mouse;
JLabel
JTextField
JButton
5. Introdução
JCheckBox – componente com dois estados: selecionado ou não-
selecionado;
JComboBox – lista de itens em que apenas um é selecionado, por
mouse ou teclado;
JLista – lista de itens em que mais de um podem ser selecionados;
JPanel – contêiner em que os componentes podem ser colocados.
JCheckBox
JComboBox
JList JPanel
6. Visão geral do Swing
Pacote javax.swing
◦ Escritos, manipulados e exibidos completamente em Java
(componentes Java puro);
Pacote java.awt
◦ Estão diretamente associados à GUI da plataforma local;
◦ Exibidos de forma diferente, dependendo da plataforma;
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
7. Caixas de Diálogo
No código AloMundo.java:
◦ JOptionPane.showMessageDialog( ... ) – return void
◦ Parâmetros:
Component parentComponent
Object message
String title (sobrecarga 1)
int messageType (sobrecarga 1)
Icon icon (sobrecarga 2)
◦ Exemplo:
JOptionPane.showMessageDialog(null,"Alô, mundo!","Primeiro
programa com interface
gráfica",JOptionPane.DEFAULT_OPTION);
8. Caixas de Diálogo
package aula.igrafica;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class AloMundo extends JFrame {
public AloMundo(){
JOptionPane.showMessageDialog(null,"Alô, mundo!","Primeiro
programa com interface
gráfica",JOptionPane.DEFAULT_OPTION);
}
public static void main(String args[]){
AloMundo aplicacao = new AloMundo();
aplicacao.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
9. Caixas de Diálogo
◦ JOptionPane.showConfirmDialog( ... ) – return int
◦ Parâmetros:
Component parentComponent
Object message
String title (sobrecarga 1)
int optionType (sobrecarga 1)
int messageType (sobrecarga 2)
Icon icon (sobrecarga 3)
◦ Exemplo:
JOptionPane.showConfirmDialog(null, "Alô,
mundo!", "Primeiro programa com interface gráfica",
JOptionPane.CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE);
11. Caixas de Diálogo
No código Calculadora.java:
JOptionPane.showInputDialog( ... ) – return String
◦ Parâmetros:
Inicial Sobrecarga 1 Sobrecarga 2
Component parentComponent Component parentComponent Component parentComponent
Object message Object message Object message
Object initialSelectedValue String title String title
int messageType int messageType
Icon icon
Object[] selectionValue
Object initialSelectedValue
◦ Exemplo:
JOptionPane.showInputDialog(null, "Qual o primeiro numero inteiro da
operação?", "Tá indo bem!", JOptionPane.QUESTION_MESSAGE);
12. Caixas de Diálogo
◦ JOptionPane.showOptionDialog( ... ) – return int
◦ Parâmetros:
Component parentComponent
Object message
String title
int optionType
int messageType
Icon icon
Object[] options
Object initialValue
◦ Exemplo:
String[] opcoes = {“Confirmar”, “Cancelar”, “Fechar”};
JOptionPane.showOptionDialog(this, "mensagem", "titulo",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.INFORMATION_MESSAGE, icon, opcoes,
opcoes[0]);
13. Layout do Componente
Aplicado em componentes containeres
FlowLayout – objetos seguidos no
container
BorderLayout – objetos dispostos nas
bordas e centro do container
◦ CENTER, NORTH, SOUTH, EAST, WEST
GridLayout – objetos dispostos como
uma tabela (colunas e linhas)
14. Layout do Componente
Qual o resultado do código?
FlowLayout layout = new FlowLayout();
Container container = getContentPane();
container.setLayout( layout );
container.add(leftButton);
container.add(centerButton);
container.add(leftButton);
setSize(300,75);
setVisible(true);
15. Layout do Componente
Qual o resultado do código?
BorderLayout layout = new BorderLayout();
Container container = getContentPane();
container.setLayout( layout );
container.add(leftButton, BorderLayout.WEST);
container.add(myList, BorderLayout.CENTER);
container.add(otherButton,
BorderLayout.SOUTH);
setSize(300,75);
setVisible(true);
16. Layout do Componente
Qual o resultado do código?
GridLayout layout = new GridLayout(2,2);
Container container = getContentPane();
container.setLayout( layout );
container.add(leftButton);
container.add(myButton);
container.add(otherButton);
setSize(300,150);
setVisible(true);
17. JFrame no NetBeans
Novo -> JFrame
public Construtor() {
initComponents();
}
public void initComponents() { (...) }
Área de Desenho e de Código.
18. Tratamento de Eventos
Mecanismo:
◦ Origem do evento
◦ Objeto evento
◦ “Ouvinte” (listener) do evento
Origem: componente GUI que interage
(botão)
Objeto: encapsula as informações sobre o
evento.
Ouvinte: recebe as informações do evento e
responde este mesmo evento.
19. Tratamento de Eventos
Tarefas do programador:
◦ Registrar o ouvinte para o componente GUI;
◦ Implementar o método de tratamento de
eventos.
Pacotes:
◦ java.awt.event
◦ javax.swing.event
Teclar Enter irá chamar o método
actionPerformed.
20. Tratamento de Eventos
TextFieldHandler handler = new TextFieldHandler;
textField1.addActionListener ( handler );
origem objeto listener
private class TextFieldHandler implements ActionListener {
// processa eventos
public void actionPerformed ( ActionEvent event ){
if (event.getSource() == textField1) objeto evento
String saida = “TextField1 clicado!”;
}
}
21. Implementação 1
Observe o uso das classes java.lang.Math e java.util.ArrayList
double res1 = Math.random();
System.out.println("Valor 1: "+res1);
Valor entre 0 e 1
double res2 = Math.random()*100;
System.out.println("Valor 2: "+res2); Valor entre 0 e 100
int res3 = (int) Math.random()*100;
System.out.println("Valor 3: "+res3); Mau uso do cast
int res4 = (int) (Math.random()*100);
System.out.println("Valor 4: "+res4); Uso correto do cast
int[] res5 = new int[20];
ArrayList array = new ArrayList();
for(int j = 0; j < res5.length; j++){
res5[j] = (int) (Math.random()*100);
array.add(res5[j]);
Valor do endereço de memória
}
System.out.println("Valor 5: "+res5);
Valores de todos os elementos
System.out.println("Valor 6: "+array);
22. Implementação 1
Pesquise sobre o uso da classe Math e
implemente um programa Java (com interface
gráfica) que tenha a entrada de dois números
inteiros, numA e numB, e escreva a saída em
valor numérico real:
◦ Método floor aplicado em numA/numB;
◦ Método ceil aplicado em numB/numA;
◦ Método pow aplicado a numAnumB e numBnumA;
◦ Método tan aplicado a tangente de numA, numB,
numA/numB e numB/numA.
23. Implementação 2
Associe as classes Scanner e ArrayList
para a implementação do seguinte
programa:
◦ Leia um vetor de 10 (dez) valores inteiros
com a classe Scanner;
◦ Multiplique cada valor lido a um número
aleatório que varie de 0 a 10000;
◦ Insira os 4 (quatro) maiores valores do novo
vetor em um objeto da classe ArrayList;
◦ Escreva na saída o valor deste novo objeto.
24. Implementação 3
Jogo de azar: “Craps”
◦ o jogador lança dois dados (cada um com seis faces,
com 1, 2, 3, 4, 5 e 6 pontos respectivamente);
◦ calcula-se a soma das faces expostas:
se soma = 7 ou 11 -> jogador venceu;
se soma = 2, 3 ou 12 -> jogador perdeu;
senão, soma torna-se a “pontuação” do jogador.
◦ os dados são lançados novamente:
soma = pontuação -> jogador venceu;
soma = 7 -> jogador perdeu;
senão, lança os dados novamente.
Projetar interface para este programa!