Académique Documents
Professionnel Documents
Culture Documents
Programao Java
Construo de Interface grfica
Grupo de Linguagens de Programao
Departamento de Informtica
PUC-Rio
Processo Bsico:
OO + Eventos
?
Exemplo
Exemplo
Hierarquia de Composio
? Componente
um Componente
agrega Componentes
Componente
is-a
contains
Container
5
Exemplo
JFrame
janela
contains
Container
content pane
contains
JPanel
painel
contains
JButton
botaoLimpa
contains
JTextField
campoTexto
6
de Texto
? Label
? Boto
? CheckBox
? Lista
? Lista dropdown
? Canvas
8
Classe JComponent
? Superclasse
javax.swing.JLabel
?
10
Exemplo de JLabel
/* Cria um label com texto */
JLabel label1 = new JLabel("Label1: Apenas Texto");
/* Cria um label com texto e imagem */
JLabel label2 = new JLabel("Label2: Imagem e texto",
new ImageIcon("javalogo.gif"),
JLabel.CENTER);
label2.setVerticalTextPosition(JLabel.BOTTOM);
label2.setHorizontalTextPosition(JLabel.CENTER);
11
javax.swing.JTextField
?
12
Exemplo de JTextField
/* Cria um campo de nome */
JTextField campoNome = new JTextField(10);
JLabel labelNome = new JLabel ("Nome: ");
labelNome.setLabelFor (campoNome);
labelNome.setDisplayedMnemonic('n'); // Alt-n
/* Cria um campo de email */
JTextField campoEmail = new JTextField(10);
JLabel labelEmail = new JLabel ("Email: ");
labelEmail.setLabelFor (campoEmail);
labelEmail.setDisplayedMnemonic('E'); // Alt-e
13
javax.swing.JButton
?
Modela um push-button
14
Exemplo de JButton
/* Cria um botao com texto */
JButton botao1 = new JButton ("Boto Desabilitado");
botao1.setEnabled(false);
botao1.setToolTipText("Exemplo de um boto de texto");
botao1.setMnemonic(KeyEvent.VK_D); // Alt-D
/* Cria um botao com texto e imagem */
JButton botao2 = new JButton("Boto Habilitado", new
ImageIcon("javalogo.gif"));
botao2.setToolTipText("Boto de texto e imagem");
botao2.setMnemonic(KeyEvent.VK_H); // Alt-H
botao2.setPressedIcon(new ImageIcon("javalogo2.gif"));
15
Alguns Containers
? Janela
? Dilogo
? Applet
? Painel
? Scroll
}
}
Pane
Containers Intermedirios
16
javax.swing.JFrame
Representa uma janela do sistema nativo
? Possui ttulo e borda
? Pode possuir menu
?
17
Exemplo
JFrame janela = new JFrame("Exemplo de Janela");
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel mensagem = new JLabel("Ol Mundo!");
janela.getContentPane().add(mensagem);
janela.setLocationRelativeTo(null); // centraliza
janela.setIconImage(new
ImageIcon("javalogo2.gif").getImage());
JMenuBar menuBar = new JMenuBar();
menuBar.add(new JMenu("Menu"));
janela.setJMenuBar (menuBar);
janela.pack();
janela.show();
18
javax.swing.JPanel
? Modela
19
Diagramadores
? Arrumam um
grupo de elementos
? Esto associados aos containers
? Diferentes estilos de arrumao
como fluxo de texto
orientada pelas bordas
em forma de grade
e outros...
20
10
java.awt.FlowLayout
? Coloca
21
Exemplo de FlowLayout
Container contentPane = janela.getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(new JButton("Button 1"));
contentPane.add(new JButton("2"));
contentPane.add(new JButton("Button 3"));
contentPane.add(new JButton("Long-Named Button 4"));
contentPane.add(new JButton("Button 5"));
22
11
java.awt.BorderLayout
? Divide
23
Exemplo de BorderLayout
Container contentPane = janela.getContentPane();
//contentPane.setLayout(new BorderLayout()); // Desnecessrio
contentPane.add(new JButton("Button 1 (NORTH)"),
BorderLayout.NORTH);
contentPane.add(new JButton("2 (CENTER)"),
BorderLayout.CENTER);
contentPane.add(new JButton("Button 3 (WEST)"),
BorderLayout.WEST);
contentPane.add(new JButton("Long-Named Button 4 (SOUTH)"),
BorderLayout.SOUTH);
contentPane.add(new JButton("Button 5 (EAST)"),
BorderLayout.EAST);
24
12
java.awt.GridLayout
? Clulas
25
Exemplo de GridLayout
Container contentPane = janela.getContentPane();
contentPane.setLayout(new GridLayout(0,2));
contentPane.add(new
contentPane.add(new
contentPane.add(new
contentPane.add(new
contentPane.add(new
JButton("Button 1"));
JButton("2"));
JButton("Button 3"));
JButton("Long-Named Button 4"));
JButton("Button 5"));
26
13
27
14
Mecanismos de Callback
Para que o programa possa ser chamado pelo
sistema, ele deve registrar uma funo para
cada evento de interface que ele desejar tratar.
Tais funes so chamadas de callbacks por
serem chamadas de volta pelo sistema.
29
Callbacks OO?
Esse modelo ortogonal ao modelo de
orientao por objetos. perfeitamente
possvel projetar um sistema OO que use o
modelo de orientao por eventos para tratar
eventos de interface, comunicaes, etc.
Porm, temos um problema: uma linguagem
puramente OO no possui o conceito de
funo. Como resolver ento?
30
15
Objeto Callback
A soluo utilizar um objeto que faa o papel
de callback. Ou seja, onde registraramos uma
funo, passamos a registrar um objeto. Assim,
quando o sistema precisar executar a callback,
ele dever executar um determinado mtodo do
objeto. Esse mtodo, ento, far o tratamento
do evento.
31
Callbacks em Java
? Como
32
16
Listeners
? Definem interfaces
que representam um
grupo de callbacks
? So registrados junto aos componentes
? Exemplo: java.awt.event.MouseListener
public
public
public
public
public
abstract
abstract
abstract
abstract
abstract
void
void
void
void
void
mouseClicked(MouseEvent e)
mousePressed(MouseEvent e)
mouseReleased(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
34
17
ActionListener
? Modela
35
WindowListener
? Modela
public
public
public
public
public
public
public
abstract
abstract
abstract
abstract
abstract
abstract
abstract
void
void
void
void
void
void
void
windowOpened(WindowEvent e)
windowClosing(WindowEvent e)
windowClosed(WindowEvent e)
windowIconified(WindowEvent e)
windowDeiconified(WindowEvent e)
windowActivated(WindowEvent e)
windowDeactivated(WindowEvent e)
36
18
Eventos
? Trazem
37
ActionEvent
? Modela
38
19
WindowEvent
? Modela
public
public
public
public
static
static
static
static
final
final
final
final
int
int
int
int
WINDOW_OPENED
WINDOW_CLOSING
WINDOW_CLOSED
WINDOW_ICONIFIED
Implementando um Listener
? Define
40
20
Registrando um Listener
? Cria
41
Implementando um Listener
de Janela
Para criarmos um listener para um evento de
janela devemos criar uma classe que implemente
a interface WindowListener. Nessa classe,
codificaremos, ento, o mtodo correspondente
ao evento que desejamos tratar. Porm, no
podemos implementar uma interface e deixar de
codificar algum mtodo. Assim, precisaremos
implementar todos os sete mtodos definidos.
42
21
Implementando um Listener
de Janela
class MeuListener implements WindowListener {
public void windowOpened(WindowEvent e) { }
public void windowClosing(WindowEvent e) {
System.out.println("Janela sendo fechada");
}
public void windowClosed(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowDeiconified(WindowEvent e){ }
public void windowActivated(WindowEvent e){ }
public void windowDeactivated(WindowEvent e) { }
}
43
Adaptadores
No caso anterior, seis implementaes seriam
vazias pois s desejvamos responder a um
nico evento. Como essa uma situao
comum, o pacote event define adaptadores
para todas as interfaces de listeners que tm
mais de um mtodo. Um adaptador uma
classe que implementa o listener e d
implementaes vazias para todos os
mtodos.
44
22
Adaptadores
class MeuListener extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.out.println("Janela sendo fechada");
}
}
45
aninhada dinamicamente
local ao mtodo que faz o registro do listener
annima
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Boto pressionado");
}
});
46
23
import java.awt.event.*;
import javax.swing.*;
Exemplo I
import java.awt.event.*;
import javax.swing.*;
47
Exemplo II
48
24
import java.awt.event.*;
import javax.swing.*;
Exemplo III
49
import java.awt.event.*;
import javax.swing.*;
Exemplo IV
50
25