Universidade Presbiteriana Mackenzie
Aula 8b: Gerenciadores de Layout
Prof. Ms. Daniel Arndt Alves
Faculdade de Computação...
Tópicos da Aula
• Gerenciadores de Layout
• Modelo de gerenciamento de
eventos no Java AWT
• Implementação básica de trata...
O posicionamento de componentes pode ser controlado
através de gerenciadores de layout. O AWT possui
cinco gerenciadores d...
Utilização dos gerenciadores
Uma vez instanciado o gerenciador, a atribuição deste a
um container é feita através da chama...
FlowLayout
Trata o container como um conjunto de linhas. A
altura das linhas é determinada pela altura dos
itens nelas con...
FlowLayout
Alinhamento LEFT
Frame f=new Frame("Exemplo de Dialogo");
FlowLayout fluxo=new FlowLayout(FlowLayout.LEFT);
f.s...
FlowLayout
Alinhamento CENTER
Frame f=new Frame("Exemplo de Dialogo");
FlowLayout fluxo=new flowLayout(FlowLayout.CENTER);...
FlowLayout
Alinhamento RIGHT
Frame f=new Frame("Exemplo de Dialogo");
FlowLayout fluxo=new FlowLayout(FlowLayout.RIGHT);
f...
FlowLayout
Espaçamento
Frame f=new Frame("Exemplo de Dialogo");
FlowLayout fluxo=new flowLayout(FlowLayout.CENTER, 5, 15);...
GridLayout
Trata o container como uma matriz de linhas e colunas.
Possui dois construtores:
public GridLayout(int linhas, ...
GridLayout
Frame f=new Frame("Exemplo de Dialogo");
GridLayout grid=new GridLayout(2, 3, 20, 10);
f.setLayout(grid);
Danie...
BorderLayout
Divide o container em até cinco partes, cujos
identificadores são:
North
West Center East
South
Container
Dan...
BorderLayout
Frame frame=new Frame("Exemplo de Dialogo");
frame.setLayout(new BorderLayout());
add("North", new Button("No...
CardLayout
Trata o container como uma pilha de fichas. Cada
componente é considerado uma ficha separada, e
apenas uma dela...
CardLayout
Frame frame=new Frame("Exemplo de Dialogo");
frame.setLayout(new CardLayout());
add(new Button("Norte"));
add(n...
CardLayout
Cada um dos componentes adicionados segundo o
gerenciador CardLayout pode ser acessado
segundo os seguintes mét...
CardLayout
Exemplo de Acesso
Frame frame=new Frame("Exemplo de Dialogo");
CardLayout ger=new CardLayout();
frame.setLayout...
GridBagLayout
Funciona como o GridLayout, dividindo o container
em linhas e colunas. Porém, um componente pode
ocupar mais...
GridBagConstraint
Classe que especifica os detalhes de inserção de
componentes em containers, segundo o gerenciador
GridBa...
GridBagConstraint
Os atributos gridwidth e gridweight também podem
assumir valores especiais, indicados por:
• GridBagCons...
GridBagConstraint
Para atribuir uma “constraint” a um componente, faz-se:
1. Instancia-se a classe GridBagConstraints
2. A...
GridBagLayout
Daniel Arndt Alves Gerenciadores de Layout 22
GridBagLayout
import java.awt.*;
import java.util.*;
import java.applet.Applet;
public class GridBagEx1 extends Applet {
v...
GridBagLayout
public void init() {
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c =
new GridBagConstrai...
GridBagLayout
c.gridwidth = GridBagConstraints.REMAINDER;
makebutton("Button4", gridbag, c);
c.weightx = 0.0;
makebutton("...
GridBagLayout
c.gridwidth = 1;
c.gridheight = 2;
c.weighty = 1.0; // Distribuição vertical de espaço
makebutton("Button8",...
Não há necessidade de se ficar vinculado
exclusivamente às classes de gerenciamento vistas
anteriormente.
Classes que defi...
Eventos estão relacionados com a parte dinâmica
de uma interface. Por exemplo, se houve um
clique de mouse em cima de um b...
Java AWT consegue gerenciar diretamente os seguintes
tipos básicos de eventos:
• eventos de mouse
• eventos de teclado
• e...
Modelo de gerenciamento de eventos em Java AWT
A notificação de ocorrência e tratamento do evento
é baseada em dois método...
Container
Componente Componente
Container
Componente Componente Componente
Container
Componente Componente
Evento
Daniel A...
Modelo de gerenciamento de eventos em Java AWT
Componente
Container
Componente Container
Componente Componente Componente ...
Componente
Container
Componente Container
Componente Componente Componente Container
Componente Componente
postEvent()
pos...
Tratamento de eventos
Existem várias maneiras que um componente
pode implementar seu tratamento para um
determinado evento...
Método handleEvent
O método handleEvent é definido segundo o
seguinte protótipo:
public boolean handleEvent(Event evt);
Ev...
Classe Event
A classe Event possui três atributos
importantes no tratamento de eventos:
• Object target : alvo do evento
•...
Atributo id
A consulta ao atributo id geralmente é feita via
constantes da classe Event:
Event.MOUSE_ENTER Event.MOUSE_EXI...
Método handleEvent
O comportamento padrão do método handleEvent é
determinar se ocorreu (na seguinte ordem) os
eventos:
1....
Eventos de mouse
Os eventos de mouse tratados pelo AWT são:
• entrar com mouse num componente
(id=Event.MOUSE_ENTER)
• sai...
Eventos de mouse
• Apertar botão do mouse sobre um componente
(id=Event.MOUSE_DOWN)
• Arrastar mouse com botão pressionado...
Event.MOUSE_ENTER
Pode ser tratado dentro do método:
public boolean mouseEnter(Event evt, int x, int y)
(x, y) : coordenad...
Event.MOUSE_EXIT
Pode ser tratado dentro do método:
public boolean mouseExit(Event evt, int x, int y)
(x, y) : coordenada ...
Event.MOUSE_MOVE
Pode ser tratado dentro do método:
public boolean mouseMove(Event evt, int x, int y)
(x, y) : coordenada ...
Event.MOUSE_DOWN
Pode ser tratado dentro do método:
public boolean mouseDown(Event evt, int x, int y)
(x, y) : coordenada ...
Event.MOUSE_DRAG
Pode ser tratado dentro do método:
public boolean mouseDrag(Event evt, int x, int y)
(x, y) : coordenada ...
Event.MOUSE_UP
Pode ser tratado dentro do método:
public boolean mouseUp(Event evt, int x, int y)
(x, y) : coordenada onde...
Ainda dentro dos eventos de mouse, o método
handleEvent faz a verificação na
sequência:
1. MOUSE_ENTER
2. MOUSE_EXIT
3. MO...
Exemplo
// Botão com todos os tratamentos de evento
import java.awt.*;
public class botao
extends Button{
botao(String rot...
Exemplo
public boolean mouseEnter(Event evt, int x, int y){
System.out.println("Entrou no componente");
return(true);
}
pu...
Exemplo
public boolean mouseDown(Event evt,int x,int y){
System.out.println(“Clique no componente”);
return(true);
}
publi...
Eventos de teclado
Dois tipos de evento podem ocorrer no teclado:
• pressionar teclas
– Event.KEY_PRESS : teclas ASCII
– E...
Event.KEY_PRESS
Event.KEY_ACTION
Podem ser tratados dentro do método:
public boolean keyDown(Event evt, int key)
key : cód...
Event.KEY_RELEASE
Event.KEY_ACTION_RELEASE
Podem ser tratados dentro do método:
public boolean keyUp(Event evt, int key)
k...
Ordem de Verificação
Ainda dentro dos eventos de teclado, o método
handleEvent faz a verificação na seqüência:
1. KEY_PRES...
Exemplo
// Botão com tratamento de teclado no botão
import java.awt.*;
public class botao
extends Button{
botao(String rot...
Exemplo
public boolean keyDown(Event evt,int key){
if (key=='a')
setLabel("Tecla a pressionada");
else if (key==Event.LEFT...
Eventos de ação
Quando ocorre um evento de ação
(Event.ACTION_EVENT), o tratamento pode ser
colocado dentro do método:
pub...
Argumento do evento de ação
Componente arg
Button Rótulo do botão
Checkbox Estado do checkbox
Choice Opção escolhida
List ...
Exemplo
public boolean action(Event evt,Object arg){
// Verifica se foi ação no botão
if (evt.target instanceof Button)
//...
Evento de ganho de foco
Quando ocorre um evento de ganho de foco
(Event.GOT_FOCUS), o tratamento pode ser
colocado dentro ...
Evento de perda de foco
Quando ocorre um evento de perda de foco
(Event.LOST_FOCUS), o tratamento pode ser
colocado dentro...
Outros Eventos
Alguns eventos, porém, não possuem uma rota
de tratamento bem definida como nos eventos
anteriores.
Neste c...
Exemplo 1
Tratamento de barras de rolagem
import java.awt.*;
class exemplo
extends Frame{
Scrollbar barra=new Scrollbar();...
Exemplo 2
Tratamento de fechamento da janela principal
import java.awt.*;
class exemplo
extends Frame{
Scrollbar barra=new...
Tratamento mais complexo de eventos
Para um tratamento mais complexo de eventos podem ser
implementados métodos de várias ...
Daniel Arndt Alves Gerenciadores de Layout 66
Daniel Arndt Alves Gerenciadores de Layout 67
Imagens
• http://www.goldb.org/goldblog/cmg_images/
real_programmers_binary.jpg
• http://sandersconsulting.com/Portals/583...
Obrigado
Daniel Arndt Alves
http://www.progdan.pro.br/
daniel.alves@mackenzie.br
progdan@progdan.pro.br
Daniel Arndt Alves...
Upcoming SlideShare
Loading in …5
×

Gerenciadores de Layout

1,222 views
1,154 views

Published on

Gerenciadores de Layout em interfaces gráficas desenvolvidas em linguagem Java

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,222
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Gerenciadores de Layout

  1. 1. Universidade Presbiteriana Mackenzie Aula 8b: Gerenciadores de Layout Prof. Ms. Daniel Arndt Alves Faculdade de Computação e Informática Linguagem de Programação II Daniel Arndt Alves Gerenciadores de Layout 1
  2. 2. Tópicos da Aula • Gerenciadores de Layout • Modelo de gerenciamento de eventos no Java AWT • Implementação básica de tratamento de eventos Daniel Arndt Alves Gerenciadores de Layout 2
  3. 3. O posicionamento de componentes pode ser controlado através de gerenciadores de layout. O AWT possui cinco gerenciadores de layout: • FlowLayout • GridLayout • BorderLayout • CardLayout • GridBagLayout Daniel Arndt Alves Gerenciadores de Layout 3 Gerenciadores de layout
  4. 4. Utilização dos gerenciadores Uma vez instanciado o gerenciador, a atribuição deste a um container é feita através da chamada: container.setLayout(Instância do gerenciador); A partir deste ponto, utiliza-se o método add para adicionar os componentes dentro do container, obedecendo-se as características de cada gerenciador. Daniel Arndt Alves Gerenciadores de Layout 4
  5. 5. FlowLayout Trata o container como um conjunto de linhas. A altura das linhas é determinada pela altura dos itens nelas contidos. A classe FlowLayout possui três construtores: public FlowLayout() (alinhamento CENTER) public FlowLayout(int alinhamento) public FlowLayout(int alinhamento, int espaçamento horizontal, int espaçamento vertical) Daniel Arndt Alves Gerenciadores de Layout 5
  6. 6. FlowLayout Alinhamento LEFT Frame f=new Frame("Exemplo de Dialogo"); FlowLayout fluxo=new FlowLayout(FlowLayout.LEFT); f.setLayout(fluxo); Daniel Arndt Alves Gerenciadores de Layout 6
  7. 7. FlowLayout Alinhamento CENTER Frame f=new Frame("Exemplo de Dialogo"); FlowLayout fluxo=new flowLayout(FlowLayout.CENTER); f.setLayout(fluxo); Daniel Arndt Alves Gerenciadores de Layout 7
  8. 8. FlowLayout Alinhamento RIGHT Frame f=new Frame("Exemplo de Dialogo"); FlowLayout fluxo=new FlowLayout(FlowLayout.RIGHT); f.setLayout(fluxo); Daniel Arndt Alves Gerenciadores de Layout 8
  9. 9. FlowLayout Espaçamento Frame f=new Frame("Exemplo de Dialogo"); FlowLayout fluxo=new flowLayout(FlowLayout.CENTER, 5, 15); f.setLayout(fluxo); Daniel Arndt Alves Gerenciadores de Layout 9
  10. 10. GridLayout Trata o container como uma matriz de linhas e colunas. Possui dois construtores: public GridLayout(int linhas, int colunas) public GridLayout(int linhas, int colunas, int espaçamento horizontal, int espaçamento vertical) Daniel Arndt Alves Gerenciadores de Layout 10
  11. 11. GridLayout Frame f=new Frame("Exemplo de Dialogo"); GridLayout grid=new GridLayout(2, 3, 20, 10); f.setLayout(grid); Daniel Arndt Alves Gerenciadores de Layout 11
  12. 12. BorderLayout Divide o container em até cinco partes, cujos identificadores são: North West Center East South Container Daniel Arndt Alves Gerenciadores de Layout 12
  13. 13. BorderLayout Frame frame=new Frame("Exemplo de Dialogo"); frame.setLayout(new BorderLayout()); add("North", new Button("Norte")); add("South", new Button("Sul")); add("East", new Button("Leste")); add("West", new Button("Oeste")); add("Center", new Button("Centro")); Daniel Arndt Alves Gerenciadores de Layout 13
  14. 14. CardLayout Trata o container como uma pilha de fichas. Cada componente é considerado uma ficha separada, e apenas uma delas é visível de cada vez. Possui o seguinte construtor básico: public CardLayout() Daniel Arndt Alves Gerenciadores de Layout 14
  15. 15. CardLayout Frame frame=new Frame("Exemplo de Dialogo"); frame.setLayout(new CardLayout()); add(new Button("Norte")); add(new Button("Sul")); add(new Button("Leste")); add(new Button("Oeste")); add(new Button("Centro")); Daniel Arndt Alves Gerenciadores de Layout 15
  16. 16. CardLayout Cada um dos componentes adicionados segundo o gerenciador CardLayout pode ser acessado segundo os seguintes métodos: public void first(Container pai); public void last(Container pai); public void next(Container pai); public void previous(Container pai); public void show(Container pai, String nome); Daniel Arndt Alves Gerenciadores de Layout 16
  17. 17. CardLayout Exemplo de Acesso Frame frame=new Frame("Exemplo de Dialogo"); CardLayout ger=new CardLayout(); frame.setLayout(ger); frame.add(new Button("Norte")); frame.add(new Button("Sul")); frame.add(new Button("Leste")); frame.add(new Button("Oeste")); frame.add(new Button("Centro")); ger.first(frame); // Acessa o primeiro componente ger.next(frame); // Acessa o próximo componente Daniel Arndt Alves Gerenciadores de Layout 17
  18. 18. GridBagLayout Funciona como o GridLayout, dividindo o container em linhas e colunas. Porém, um componente pode ocupar mais de uma célula. Ao adicionar um componente num gerenciamento por GridBagLayout, ele recebe uma GridBagConstraint, que tem instruções de posicionamento e dimensionamento. O construtor da classe é bem simples: public GridBagLayout() Daniel Arndt Alves Gerenciadores de Layout 18
  19. 19. GridBagConstraint Classe que especifica os detalhes de inserção de componentes em containers, segundo o gerenciador GridBagLayout. Algumas atributos importantes da classe são: • gridwidth: número de células em uma linha para exibição do componente • gridheight: número de células em uma coluna para exibição do componente O valor padrão de cada um destes atributos é 1. Daniel Arndt Alves Gerenciadores de Layout 19
  20. 20. GridBagConstraint Os atributos gridwidth e gridweight também podem assumir valores especiais, indicados por: • GridBagConstraints.REMAINDER : especifica que o componente é último da linha. • GridBagConstraints.RELATIVE : especifica que o componente é o próximo numa linha/coluna. Daniel Arndt Alves Gerenciadores de Layout 20
  21. 21. GridBagConstraint Para atribuir uma “constraint” a um componente, faz-se: 1. Instancia-se a classe GridBagConstraints 2. Altera-se os atributos destas instância 3. Utiliza-se o método setContraints, da classe GridBagLayout, com os seguintes parâmetros: void setContraints(Component c, GridBagConstraints g) Daniel Arndt Alves Gerenciadores de Layout 21
  22. 22. GridBagLayout Daniel Arndt Alves Gerenciadores de Layout 22
  23. 23. GridBagLayout import java.awt.*; import java.util.*; import java.applet.Applet; public class GridBagEx1 extends Applet { void makebutton(String name, GridBagLayout gridbag, GridBagConstraints c) { Button button = new Button(name); gridbag.setConstraints(button, c); add(button); } Daniel Arndt Alves Gerenciadores de Layout 23
  24. 24. GridBagLayout public void init() { GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); setFont(new Font("Helvetica", Font.PLAIN, 14)); setLayout(gridbag); // Distribuição horizontal de espaço c.weightx = 1.0; makebutton("Button1", gridbag, c); makebutton("Button2", gridbag, c); makebutton("Button3", gridbag, c); Daniel Arndt Alves Gerenciadores de Layout 24
  25. 25. GridBagLayout c.gridwidth = GridBagConstraints.REMAINDER; makebutton("Button4", gridbag, c); c.weightx = 0.0; makebutton("Button5", gridbag, c); c.gridwidth = GridBagConstraints.RELATIVE; makebutton("Button6", gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; makebutton("Button7", gridbag, c); Daniel Arndt Alves Gerenciadores de Layout 25
  26. 26. GridBagLayout c.gridwidth = 1; c.gridheight = 2; c.weighty = 1.0; // Distribuição vertical de espaço makebutton("Button8", gridbag, c); c.weighty = 0.0; c.gridwidth = GridBagConstraints.REMAINDER; c.gridheight = 1; makebutton("Button9", gridbag, c); makebutton("Button10", gridbag, c); setSize(300, 100); } Daniel Arndt Alves Gerenciadores de Layout 26
  27. 27. Não há necessidade de se ficar vinculado exclusivamente às classes de gerenciamento vistas anteriormente. Classes que definem gerenciamento de layout implementam uma das seguintes interfaces: • LayoutManager : layout sem constraints • LayoutManager2: layout com constraints Daniel Arndt Alves Gerenciadores de Layout 27 Implementação de gerenciadores de Layout
  28. 28. Eventos estão relacionados com a parte dinâmica de uma interface. Por exemplo, se houve um clique de mouse em cima de um botão da interface, diz-se que ocorreu um evento de mouse. O Java AWT implementa um mecanismo bastante robusto para gerenciamento de eventos. Daniel Arndt Alves Gerenciadores de Layout 28 Eventos
  29. 29. Java AWT consegue gerenciar diretamente os seguintes tipos básicos de eventos: • eventos de mouse • eventos de teclado • eventos de ação • eventos de foco Daniel Arndt Alves Gerenciadores de Layout 29 Tipos de Eventos
  30. 30. Modelo de gerenciamento de eventos em Java AWT A notificação de ocorrência e tratamento do evento é baseada em dois métodos da classe java.awt.Component: • deliverEvent() : despacha o evento para o componente • postEvent() : chama o método handleEvent() para verificar se o componente poderia tratar o evento. Daniel Arndt Alves Gerenciadores de Layout 30
  31. 31. Container Componente Componente Container Componente Componente Componente Container Componente Componente Evento Daniel Arndt Alves Gerenciadores de Layout 31 Modelo de gerenciamento de eventos em Java AWT
  32. 32. Modelo de gerenciamento de eventos em Java AWT Componente Container Componente Container Componente Componente Componente Container Componente Componente deliverEvent() deliverEvent() deliverEvent() deliverEvent() Daniel Arndt Alves Gerenciadores de Layout 32
  33. 33. Componente Container Componente Container Componente Componente Componente Container Componente Componente postEvent() postEvent() * * ** postEvent() * if (handleEvent(Event) == false) super.postEvent() ** handleEvent(Event)== true) Daniel Arndt Alves Gerenciadores de Layout 33 Modelo de gerenciamento de eventos em Java AWT
  34. 34. Tratamento de eventos Existem várias maneiras que um componente pode implementar seu tratamento para um determinado evento. O ponto importante é entender que o método handleEvent(Event) é o despachante de eventos central para um componente. Daniel Arndt Alves Gerenciadores de Layout 34
  35. 35. Método handleEvent O método handleEvent é definido segundo o seguinte protótipo: public boolean handleEvent(Event evt); Event é uma classe do AWT que abstrai as características do evento e já vem instanciada na chamada do método. Daniel Arndt Alves Gerenciadores de Layout 35
  36. 36. Classe Event A classe Event possui três atributos importantes no tratamento de eventos: • Object target : alvo do evento • int id : tipo do evento (constantes) • int key : código de tecla pressionada Daniel Arndt Alves Gerenciadores de Layout 36
  37. 37. Atributo id A consulta ao atributo id geralmente é feita via constantes da classe Event: Event.MOUSE_ENTER Event.MOUSE_EXIT Event.MOUSE_MOVE Event.MOUSE_DOWN Event.MOUSE_DRAG Event.MOUSE_UP Event.MOUSE_UP Event.KEY_PRESS Event.KEY_ACTION Event.KEY_RELEASE Event.KEY_ACTION_RELEASE Event.ACTION_EVENT Event.GOT_FOCUS Event.LOST_FOCUS Daniel Arndt Alves Gerenciadores de Layout 37
  38. 38. Método handleEvent O comportamento padrão do método handleEvent é determinar se ocorreu (na seguinte ordem) os eventos: 1. De mouse 2. De teclado 3. De ação (usuário quer que alguma ação ocorra) 4. De foco no componente 5. De perda de foco no componente e chamar o método de tratamento correspondente. Daniel Arndt Alves Gerenciadores de Layout 38
  39. 39. Eventos de mouse Os eventos de mouse tratados pelo AWT são: • entrar com mouse num componente (id=Event.MOUSE_ENTER) • sair com mouse de um componente (id=Event.MOUSE_EXIT) • movimentar o mouse sobre um componente (id=Event.MOUSE_MOVE) Daniel Arndt Alves Gerenciadores de Layout 39
  40. 40. Eventos de mouse • Apertar botão do mouse sobre um componente (id=Event.MOUSE_DOWN) • Arrastar mouse com botão pressionado sobre um componente (id = Event.MOUSE_DRAG) • soltar botão do mouse sobre um componente (id=Event.MOUSE_UP) Daniel Arndt Alves Gerenciadores de Layout 40
  41. 41. Event.MOUSE_ENTER Pode ser tratado dentro do método: public boolean mouseEnter(Event evt, int x, int y) (x, y) : coordenadas de entrada Daniel Arndt Alves Gerenciadores de Layout 41
  42. 42. Event.MOUSE_EXIT Pode ser tratado dentro do método: public boolean mouseExit(Event evt, int x, int y) (x, y) : coordenada de saída Daniel Arndt Alves Gerenciadores de Layout 42
  43. 43. Event.MOUSE_MOVE Pode ser tratado dentro do método: public boolean mouseMove(Event evt, int x, int y) (x, y) : coordenada do movimento Daniel Arndt Alves Gerenciadores de Layout 43
  44. 44. Event.MOUSE_DOWN Pode ser tratado dentro do método: public boolean mouseDown(Event evt, int x, int y) (x, y) : coordenada de pressionamento do botão Daniel Arndt Alves Gerenciadores de Layout 44
  45. 45. Event.MOUSE_DRAG Pode ser tratado dentro do método: public boolean mouseDrag(Event evt, int x, int y) (x, y) : coordenada de arrasto Daniel Arndt Alves Gerenciadores de Layout 45
  46. 46. Event.MOUSE_UP Pode ser tratado dentro do método: public boolean mouseUp(Event evt, int x, int y) (x, y) : coordenada onde botão foi solto Daniel Arndt Alves Gerenciadores de Layout 46
  47. 47. Ainda dentro dos eventos de mouse, o método handleEvent faz a verificação na sequência: 1. MOUSE_ENTER 2. MOUSE_EXIT 3. MOUSE_MOVE 4. MOUSE_DOWN 5. MOUSE_DRAG 6. MOUSE_UP Daniel Arndt Alves Gerenciadores de Layout 47 Ordem de Verificação
  48. 48. Exemplo // Botão com todos os tratamentos de evento import java.awt.*; public class botao extends Button{ botao(String rotulo){ // Construtor super(rotulo); } Daniel Arndt Alves Gerenciadores de Layout 48
  49. 49. Exemplo public boolean mouseEnter(Event evt, int x, int y){ System.out.println("Entrou no componente"); return(true); } public boolean mouseExit(Event evt, int x, int y){ System.out.println("Saiu do componente"); return(true); } public boolean mouseMove(Event evt, int x, int y){ System.out.println("Movimento sobre botão"); return(true); } Daniel Arndt Alves Gerenciadores de Layout 49
  50. 50. Exemplo public boolean mouseDown(Event evt,int x,int y){ System.out.println(“Clique no componente”); return(true); } public boolean mouseDrag(Event evt,int x,int y){ System.out.println(“Arrasto em cima do componente”); return(true); } public boolean mouseUp(Event evt,int x,int y){ System.out.println(“Soltou em cima do botão”); return(true); } } // Botão Daniel Arndt Alves Gerenciadores de Layout 50
  51. 51. Eventos de teclado Dois tipos de evento podem ocorrer no teclado: • pressionar teclas – Event.KEY_PRESS : teclas ASCII – Event.KEY_ACTION : teclas não-ASCII • soltar teclas – Event.KEY_RELEASE : teclas ASCII – Event.KEY_ACTION_RELEASE: teclas não-ASCII Daniel Arndt Alves Gerenciadores de Layout 51
  52. 52. Event.KEY_PRESS Event.KEY_ACTION Podem ser tratados dentro do método: public boolean keyDown(Event evt, int key) key : código da tecla pressionada Daniel Arndt Alves Gerenciadores de Layout 52
  53. 53. Event.KEY_RELEASE Event.KEY_ACTION_RELEASE Podem ser tratados dentro do método: public boolean keyUp(Event evt, int key) key : código da tecla pressionada Daniel Arndt Alves Gerenciadores de Layout 53
  54. 54. Ordem de Verificação Ainda dentro dos eventos de teclado, o método handleEvent faz a verificação na seqüência: 1. KEY_PRESS e KEY_ACTION 2. KEY_RELEASE e KEY_ACTION_RELEASE Daniel Arndt Alves Gerenciadores de Layout 54
  55. 55. Exemplo // Botão com tratamento de teclado no botão import java.awt.*; public class botao extends Button{ botao(String rotulo){ // Construtor super(rotulo); } Daniel Arndt Alves Gerenciadores de Layout 55
  56. 56. Exemplo public boolean keyDown(Event evt,int key){ if (key=='a') setLabel("Tecla a pressionada"); else if (key==Event.LEFT) setLabel("Seta esquerda pressionada"); else if (key==Event.RIGHT) setLabel("Seta direita pressionada"); return(true); } }// botao Daniel Arndt Alves Gerenciadores de Layout 56
  57. 57. Eventos de ação Quando ocorre um evento de ação (Event.ACTION_EVENT), o tratamento pode ser colocado dentro do método: public boolean action(Event evt, Object arg) arg - depende do componente onde ocorreu a ação Daniel Arndt Alves Gerenciadores de Layout 57
  58. 58. Argumento do evento de ação Componente arg Button Rótulo do botão Checkbox Estado do checkbox Choice Opção escolhida List Opção escolhida com duplo clique TextField Conteúdo após return pressionado Daniel Arndt Alves Gerenciadores de Layout 58
  59. 59. Exemplo public boolean action(Event evt,Object arg){ // Verifica se foi ação no botão if (evt.target instanceof Button) // Mostra rótulo do botão em maiúsculas System.out.println(((String) arg).toUpperCase()); return(true); } Daniel Arndt Alves Gerenciadores de Layout 59
  60. 60. Evento de ganho de foco Quando ocorre um evento de ganho de foco (Event.GOT_FOCUS), o tratamento pode ser colocado dentro do método: public boolean gotFocus(Event evt, Object arg) arg - depende do componente onde ocorreu a ação Daniel Arndt Alves Gerenciadores de Layout 60
  61. 61. Evento de perda de foco Quando ocorre um evento de perda de foco (Event.LOST_FOCUS), o tratamento pode ser colocado dentro do método: public boolean lostFocus(Event evt, Object arg) arg - depende do componente onde ocorreu a ação Daniel Arndt Alves Gerenciadores de Layout 61
  62. 62. Outros Eventos Alguns eventos, porém, não possuem uma rota de tratamento bem definida como nos eventos anteriores. Neste caso, uma solução bem simples é alterar a implementação do método handleEvent para direcionar o tratamento de tais eventos. Daniel Arndt Alves Gerenciadores de Layout 62
  63. 63. Exemplo 1 Tratamento de barras de rolagem import java.awt.*; class exemplo extends Frame{ Scrollbar barra=new Scrollbar(); ... public boolean handleEvent(Event evt){ if (evt.target==barra) barra.setValue(((Integer) evt.arg).intValue()); return(true); } } Daniel Arndt Alves Gerenciadores de Layout 63
  64. 64. Exemplo 2 Tratamento de fechamento da janela principal import java.awt.*; class exemplo extends Frame{ Scrollbar barra=new Scrollbar(); ... public boolean handleEvent(Event evt){ if (evt.id==Event.WINDOW_DESTROY) System.exit(0); return(true); } } Daniel Arndt Alves Gerenciadores de Layout 64
  65. 65. Tratamento mais complexo de eventos Para um tratamento mais complexo de eventos podem ser implementados métodos de várias interfaces de eventos do pacote java.awt.Event. Por exemplo: • MouseListener • ActionListener • WindowListener Daniel Arndt Alves Gerenciadores de Layout 65
  66. 66. Daniel Arndt Alves Gerenciadores de Layout 66
  67. 67. Daniel Arndt Alves Gerenciadores de Layout 67
  68. 68. Imagens • http://www.goldb.org/goldblog/cmg_images/ real_programmers_binary.jpg • http://sandersconsulting.com/Portals/58319/i mages/checklist.jpg Daniel Arndt Alves Gerenciadores de Layout 68
  69. 69. Obrigado Daniel Arndt Alves http://www.progdan.pro.br/ daniel.alves@mackenzie.br progdan@progdan.pro.br Daniel Arndt Alves Gerenciadores de Layout 69

×