Professional Documents
Culture Documents
AWT e Swing
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Objetivo
Apresentar como Implementar
Interfaces Gráficas em Java
Utilizando
AWT e Swing
2
Estratégia de Implementação
(Regra 1)
• Para cada tipo de janela na aplicação deveremos codificar
uma classe em Java que deverá ser especialização da
classe java.awt.Frame
• Alguns métodos em Frame:
– setResizable(
setResizable(boolean modificavel)
modificavel)
AWT e Swing – Alessandro Cerqueira - 20/8/2007
– setBackground(
setBackground(Color cor)
Constantes” definidas na classe Color:
• “Constantes”
Color.
Color.black,
black, Color.
Color.blue,
blue, Color.
Color.cyan,
cyan, Color.
Color.darkGray,
darkGray, Color.
Color.gray,
gray,
Color.
Color.green,
green, Color.
Color.lightGray,
lightGray, Color.
Color.magenta,
magenta, Color.
Color.orange,
orange,
Color.
Color.pink,
pink, Color.
Color.red,
red, Color.
Color.white,
white, Color.
Color.yellow.
yellow.
– setLocation(int
setLocation(int x,int y)
– setBounds(int
setBounds(int x,int y,int largura,int altura)
– setSize(int
setSize(int largura, int altura)
4
Estratégia de Implementação
(Regra 1)
java.lang.Object
5
Exemplo
(Regra 1)
package face;
import java.
java.awt.*;
awt.*;
public class Janela extends Frame
{
// Construtor da classe Janela
public Janela(String titulo, int posX,
posX, int posY)
posY)
{
//Chamada ao construtor definido na classe Frame
super(titulo);
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Exemplo
(Regra 1)
package controle;
import face.*;
public class Programa
{
public static void main(String
main(String args[])
args[])
{
// Instancio dois objetos Janela
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Estratégia de Implementação
(Regra 2)
– Button,
Button, Label,
Label, MenuBar,
MenuBar, Menu, Canvas,
Canvas, CheckBox,
CheckBox, TextField,
TextField,
TextArea,
TextArea, etc.
import java.
java.awt.*;
awt.*;
// Construtor
public Janela(String titulo)
{
// Chamada ao construtor de Frame
super(titulo);
// Instancio um objeto da classe Font,
Font, declaro a variá
variável
// local fontePadrão e faç
faço com que esta variá
variável aponte
// para o novo objeto Font criado
Font fontePadrao = new Font("
Font("TimesRoman
TimesRoman",
", Font.BOLD,
Font.BOLD, 14);
// determino o padrão de fonte para a janela
this.
this.setFont(
setFont(fontePadrao);
fontePadrao);
// Determino a cor de fundo da janela
this.
this.setBackground (Color.WHITE);
Color.WHITE);
continua...
9
Exemplo
(Regra 2)
continuaç
continuação...
// Instancio um novo objeto Button e faç
faço com que o atributo Ok
// da janela aponte para este novo Button
this.
this.btOk
btOk = new Button("
Button("Ok
Ok");
");
// Instancio um novo objeto Button e faç
faço com que o atributo
// Cancela da janela aponte para este novo Button
this.
this.btCancela
btCancela = new Button("Cancela");
Button("Cancela");
// Instancio um novo objeto Button e faç
faço com que o atributo
// Ajuda da janela aponte para este novo Button
this.
this.btAjuda
btAjuda = new Button("Ajuda");
Button("Ajuda");
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Exemplo
(Regra 2)
package controle;
import face.*;
public class Programa
{
public static void main(String
main(String args[])
args[])
{
Janela j = new Janela("Janela com Botões");
AWT e Swing – Alessandro Cerqueira - 20/8/2007
}
}
11
ActionListener
• 1 - O botão foi pressionado.
• 2 - O objeto JButton sabe que foi peticionado, entretanto o có
código de aç
ação de resposta não esta escrito na classe JButton
JButton..
• 3 - Então o Botão faz o seguinte:
• Ele vai notificar a algué
alguém que ele foi pressionado e vai pedir a este que execute a aç
ação de resposta.
• 4 - A notificaç
notificação do JButton e feita para um LISTENER
LISTENER,, contudo o botão tem que saber quem e este listener previamente. Avisamos a
ele atravé
através do mé
método addActionListener
addActionListener..
• 5 Como o JButton vai notificar o Listener
Listener??
• Só há uma forma de comunicaç
comunicação entre os objetos: Envio de mensagem!
• A mensagem que o botão manda chama se: actionPerformed
actionPerformed..
• 6 - Sabemos que a mensagem ActionPerformed foi enviada, então o seu receptor deve executar o mé
método ActionPerformed
ActionPerformed..
• 7 - Então a classe do receptor deve ter um mé
método ActionPerformed codificado
AWT e Swing – Alessandro Cerqueira - 20/8/2007
• Se é necessá
necessário monitorar e tratar eventos que ocorrem na janela,
então a sua classe deverá
deverá implementar uma ou mais Interfaces
Listener (dependendo do tipo de aç
ação a ser tratada)
• O conceito de interface em Java e na UML é semelhante a uma
classe abstrata, que não possui atributos nem có
código de mé
métodos,
descrevendo somente as assinaturas dos mé métodos que deverão ser
codificados pelas classes que implementarem (realizarem) as
AWT e Swing – Alessandro Cerqueira - 20/8/2007
interfaces.
• No pacote java.
java.awt.
awt.event encontramos uma sé
série de Interfaces
Listener que podem ser implementadas, como:
– ActionListener:
ActionListener: destinado a manipular os eventos padrão dos componentes
(ex. Botão pressionado).
– MouseListener:
MouseListener: destinado a manipular os eventos gerados pelo mouse sobre
os componentes.
– KeyboardListener:
KeyboardListener: destinado a manipular os eventos gerados pelo teclado
sobre os componentes.
13
Estratégia de Implementação
(Regra 3)
Estratégia de Implementação
(Regra 3)
• Estrututa de Funcionamento:
– Fonte (source
Fonte
object)
– Evento (event
evento
AWT e Swing – Alessandro Cerqueira - 20/8/2007
object)
– Receptor de
Eventos (event listener listener
listener) listener
Estratégia de Implementação
(Regra 3)
AW TEvent
MouseEvent KeyEvent
ComponentEvent
escondido
• Eventos Semânticos:
– Eventos compostos de outros eventos de baixo-
baixo-nível,
possivelmente emitidos pelo pró
próprio componente a partir da
observaç
observação dos eventos de baixo-
baixo-nível. É uma boa prá
prática
de programaç
programação tratar apenas de eventos semânticos, para
garantir a portabilidade do có
código Java
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Estratégia de Implementação
(Regra 3)
• Exemplo:
– ActionEvent (botão pressionado)
1. cursor do mouse entra na área retangular do botão
2. botão do mouse é pressionado
3. cursor do mouse pode sair e entrar na área retangular do botão
4. botão do mouse é liberado dentro da área retangular do botão
• Adaptadores
AWT e Swing – Alessandro Cerqueira - 20/8/2007
– Provêm implementaç
implementações vazias ( { } ) para todos os
métodos de uma interface Listener
WindowListener WindowAdapter
MouseListener MouseAdapter
MouseMotionListener MouseMotionAdapter
KeyListener KeyAdapter
ComponentListener ComponentAdapter
FocusListener FocusAdapter
19
Exemplo
(Regra 3)
• Pegue o exemplo da regra 2 e faça as seguintes
alterações:
– Na declaração da classe:
public class MinhaJanela extends Frame
implements ActionListener
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Exemplo
(Regra 3)
–Adicionar o seguinte mé
método na classe:
public void actionPerformed(
actionPerformed(ActionEvent evento)
{
if(evento.getSource
if(evento.getSource()
() == this.
this.btOk)
btOk)
{
System.out.
System.out.println
println(
(“Botão OK pressionado”
pressionado”);
}
AWT e Swing – Alessandro Cerqueira - 20/8/2007
if(umaAcao
if(umaAcao.
.getSource()
getSource() == this.
this.btCancela)
btCancela)
{
System.out.
System.out.println
println(
(“Botão CANCELA pressionado”
pressionado”);
}
if(umaAcao
if(umaAcao.
.getSource()
getSource() == this.
this.btAjuda)
btAjuda)
{
System.out.
System.out.println
println(
(“Botão AJUDA pressionado”
pressionado”);
}
}
21
Estratégia de Implementação
(Regra 3)
• Implementar algumas interfaces Listener na classe da
janela pode requerer implementar métodos que não
gostaríamos de tratar.
• Ex: Tratamento do botão fechar da janela
class Janela extends Frame implements WindowListener
{
...
AWT e Swing – Alessandro Cerqueira - 20/8/2007
...
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Estratégia de Implementação
(Regra 3)
...
• O que é isto????
– Indico quem é o WindowListener da janela
– Instancio um objeto de WindowAdapter.
WindowAdapter. Apesar de ser uma classe
abstrata, isto é permitido pois juntamente com a instanciaç
instanciação, estamos
redefinindo o mé
método windowClosing.
windowClosing.
– Na prá
prática, o compilador cria com esta declaraç
declaração uma classe interna
“sem nome”
nome” (o nome é dado automaticamente). A geraç
geração do bytecode é
semelhante ao caso da classe Interna com nome.
26
Estratégia de Implementação
(Regra 4)
• Cada janela deverá ter o seu Gerente Layout que é um
objeto que gerencia a disposição dos componentes na janela.
• Gerente Layout (Layout Managers)
– Classes que determinam a posiç
posição dos componentes dentro de
um container
– Implementam a interface LayoutManager
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Estratégia de Implementação
(Regra 4)
– Quando a janela é redimensionada, o gerente mais uma vez
se encarrega de arrumar os componentes
– Alguns gerentes de layout se utilizam de informaç
informações do
componente como:
• getMininumSize()
getMininumSize() e
• getPreferredSize().
getPreferredSize().
AWT e Swing – Alessandro Cerqueira - 20/8/2007
this.
this.add(
add(this.
this.btSul,
btSul, BorderLayout.SOUTH
BorderLayout.SOUTH );
this.
this.btLeste = new Button(
Button(“Leste");
this.
this.add(
add(btLeste,
btLeste, BorderLayout.EAST
BorderLayout.EAST );
this.
this.btOeste = new Button("Oeste");
Button("Oeste");
this.
this.add(
add(btOeste,
btOeste, BorderLayout.WEST
BorderLayout.WEST );
this.
this.btCentro = new Button("Centro");
Button("Centro");
this.
this.add(
add(btCentro,
btCentro, BorderLayout.CENTER
BorderLayout.CENTER );
this.
this.setSize(300,100);
setSize(300,100);
this.
this.show();
}
...
}
29
Estratégia de Implementação
(Regra 4)
Exemplo
(Regra 4 - GridLayout)
class MinhaFrame extends Frame implements ActionListener
{
Button btGrid[];
btGrid[];
minhaFrame(String
minhaFrame(String tí título)
{
super(tí
super(título);
this.
this.setLayout(
setLayout( new GridLayout(4,2)
GridLayout(4,2) ); // Indico que o gerente layout é
// o objeto GridLayout criado
AWT e Swing – Alessandro Cerqueira - 20/8/2007
this.
this.btGrid = new Button[8];
Button[8];
for(int contador=0;contador<8;contador++)
{
this.
this.btGrid[contador]
btGrid[contador] = new Button("Botão
Button("Botão "+(1+contador));
this.
this.add(
add(btGrid[contador]);
btGrid[contador]); // Não determino a posiç
posição. da
// A ordem será
será esquerda para
// direita
direita e de cima para baixo
}
this.
this.setSize(300,200);
setSize(300,200);
this.
this.show();
}
...
31
Estratégia de Implementação
(Regra 4)
Estratégia de Implementação
(Regra 4)
• CardLayout
– Enquanto outros layout managers mostram todos
os componentes de uma só vez na tela, o
CardLayout exibe um de cada vez.
– Produz uma espécie de visualizador de slides dos
componentes.
AWT e Swing – Alessandro Cerqueira - 20/8/2007
Estratégia de Implementação
(Regra 4)
• Navegação
– Seguindo a ordem de inserção, a classe permite a
navegação através dos métodos:
• first(Container)
• previous(Container)
• next(Container)
AWT e Swing – Alessandro Cerqueira - 20/8/2007
• last(Container)
– Acesso a um dado slide
• É possível especificar um nome ao slide quando
adicionado ao container
• A partir desse nome, o CardLayout pode
mostrar o slide
– show(Container,String)
AWT e Swing – Alessandro Cerqueira - 20/8/2007 34
(Regra 4)
Estratégia de Implementação
35
Estratégia de Implementação
(Regra 5)
• Containers
– Podem conter outros componentes, inclusive outros
containers.
containers.
38
Classes AWT
(Hierarquia)
Button
Canvas
Object
Checkbox
Container ScrollPane
Classes List
Frame
abstratas
Scrollbar
TextArea
TextComponent
TextField
39
Classes AWT
(Frame)
• É uma janela que possui barra de título e bordas.
• Frames são containers, portanto podemos adicionar
componentes.
• Quando criamos uma janela, ela é inicialmente invisível.
Usamos o método setVisible(true) para mostrá-la na tela
e o método setVisible(false) para escondê-la.
AWT e Swing – Alessandro Cerqueira - 20/8/2007
displays.
• Tem constantes pré-definidas, que são usadas
como qualquer outra variável de classe, por
exemplo Color.red é uma constante
representando a cor vermelha.
42
Classes AWT
(Insets)
• Prove mecanismo de encapsular o gerenciamento das
margens dos quatro lados de um Container.
• Podemos obter os valores de margem de um Container
através do método getInsets() que retorna um objeto
Insets.
AWT e Swing – Alessandro Cerqueira - 20/8/2007
setModal(true)
• Uma dialog box modal impossibilita entradas para
qualquer uma das outras janelas da tela até que
ela seja fechada (janela modal).
48
Classes AWT
(Dialogs)
• O AWT oferece dois tipos de dialog box, a classe
Dialog, que oferece uma caixa de dialogo
genérica, e a classe FileDialog, que é específica
para manipulação de arquivos.
• São vinculadas, através do construtor, a janelas já
AWT e Swing – Alessandro Cerqueira - 20/8/2007
existentes.
• Todas as janelas são invisíveis quando criadas
49
Classes AWT
(CheckBox e CheckBoxGroup)
• Todo Checkbox tem um texto, que pode ser vazio, e
um estado(selecionado ou não selecionado).
• Quando Checkboxs são associadas a um
CheckboxGroup, só um pode estar selecionado.
AWT e Swing – Alessandro Cerqueira - 20/8/2007
ou mú
múltiplos
– Quando se clica num item selecionado este passa a estar
selecionado e vice-
vice-versa
rolagem.
55
Classes AWT
(Image)
• É uma classe abstrata, mas é utilizada por outros
componentes para possibilitar renderização de
imagens.
• Alguns métodos recebem como parâmetro o objeto
ImageObserver. É uma interface geralmente
representada pelo container da imagem.
AWT e Swing – Alessandro Cerqueira - 20/8/2007
– getHeigth(ImageObserver)
– getWidth(ImageObserver)
• A classe Toolkit é geralmente utilizada para obter
uma imagem.
image =
Toolkit.
Toolkit.getDefaultToolkit().
getDefaultToolkit().getImage
getImage(nomeArquivo);
(nomeArquivo)
56
Classes AWT
(Canvas)
• Representa uma área retangular destinada a suportar
operações de desenho, e monitorar eventos
realizados pelo usuário.
• É uma classe base para criação de novas classes.
• Embora sejamos tentados a desenhar diretamente no
AWT e Swing – Alessandro Cerqueira - 20/8/2007
MenuComponent
MenuItem MenuBar
AWT e Swing – Alessandro Cerqueira - 20/8/2007
MenuContainer
CheckboxMenuItem Menu
MenuShortcut
58
Classes AWT
(Menu)
• Menu é o container para MenuItem
• Como Menu é uma subclasse de MenuItem, um Menu
pode aparecer dentro de outro Menu.
• CheckboxMenuItem é um tipo especial de MenuItem
que pode ser marcado como fazemos com o
AWT e Swing – Alessandro Cerqueira - 20/8/2007
checkbox.
• Adicionamos itens com o método
– add(String
add(String label)
label), ou com
– insert(String
insert(String label,
label, int index)
index), que insere o item na posiç
posição
dada.
59
Classes AWT
(Menu)
• É simples criar uma aplicação com menu
– Adicionar barra de menu a janela (Frame)
– Adicionar menus suspensos
– Adicionar itens de menu
AWT e Swing – Alessandro Cerqueira - 20/8/2007
60
Classes AWT
(Menu)
• Para associar funcionalidade
aos itens de menu é
necessário um tratamento
de eventos adequado.
• Podemos ainda:
AWT e Swing – Alessandro Cerqueira - 20/8/2007
– Classe Polygon
– Classe Rectangle
– Classe Shape
– Classe Image,
Image, representa uma imagem
– Interface PrintGraphics,
PrintGraphics, usado para imprimir
– Classe PrintJob,
PrintJob, usado para imprimir
– Classe Toolkit,
Toolkit, ferramentas para windowing,
windowing, exemplo:
resoluç
resolução e tamanho da tela, lista de fontes, etc
65
Swing
• API baseada no AWT para construção de interfaces
– Padrão a partir do JDK 1.2
AWT e Swing – Alessandro Cerqueira - 20/8/2007
<EMBED type="application/x-
type="application/x-java-
java-applet;version=1.2.2" width="500" height="300"
align="baseline" code="Fetcher.class" codebase="."
codebase="."
pluginspage="http://java.sun.com/products/plugin/1.2/plugin
pluginspage="http://java.sun.com/products/plugin/1.2/plugin--install.html">
<NOEMBED> No Java 2 support for APPLET!!
</NOEMBED></EMBED>