aplicações java modo gráfico standalone paulo vinícius wolski radtke puc pr -...
TRANSCRIPT
![Page 2: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/2.jpg)
Aplicações Standalone Gráficas
• Trabalham com componentes de interface gráfica;
• Tais componentes fazem parte do Abstract Windows Toolkit (AWT);
• É um pacote de classes dedicado a interface gráfica, eventos, etc;
• A partir do JDK 1.2 (1.1 opcional) há o pacote Swing para interface.
![Page 3: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/3.jpg)
AWT - JanelasH iera rqu ia d a C la sse W ind ow
F ram e
F ile D ia log
D ia log
W ind ow
C o nta in er
![Page 4: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/4.jpg)
AWT - Exemplo de Aplicação StandAlone Gráfica
public class App
{
Button b;
public App()
{
this(“”);
}
public App(String titulo)
{
super(titulo);
b = new Button(“Ok”);
enableEvents(WindowEvent.WINDOW_CLOSING);
pack():
}
![Page 5: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/5.jpg)
public void processWindowEvent(WindowEvent e)
{
switch (e.getID())
{
case e.WINDOW_CLOSING:
system.exit(0);
return;
default:
super.processWindowEvent(e);
}
public static void main(String args[])
{
App a = new App(“Janela”);
a.setVisible(true);
}
}
• obs: no exemplo acima o código system.exit(0) encerra a aplicação. No caso de uma janela modal, o correto seria setVisible(false) para fechar a janela e entregar o controle à janela principal da aplicação.
![Page 6: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/6.jpg)
AWT - Janelas
• A classe Window fornece apenas o comportamento geral de uma janela, não podemos instanciá-la ;
• Normalmente utilizamos instâncias de Frame ou Dialog.
![Page 7: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/7.jpg)
AWT - Janelas
• Frame fornece um título para a janela, caixas para fechá-la, e outras características específicas de plataforma ;
• Frame também permite que sejam adicionados menus.
![Page 8: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/8.jpg)
AWT - Janelas
• Dialog é uma forma mais limitada de Frame, que tipicamente não tem um título;
• FileDialog é uma subclasse de dialog, que fornece suporte para seleção de arquivos.
![Page 9: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/9.jpg)
AWT - Frames
• Frames são janelas que são independentes de um applet e do browser que os contém ;
• Frames podem ter menus ;
• Um frame é uma janela com título, menu e outras características de uma janela.
![Page 10: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/10.jpg)
AWT - Frames
• Para criarmos um frame utilizamos :– new Frame() : cria um frame sem um título ;– new Frame(String str) : cria um frame com o
título indica por srt.
• Frames se comportam de maneira parecida com panels ;
• Layouts são selecionados e componentes são adicionados da mesma maneira.
![Page 11: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/11.jpg)
AWT - Frames
• No exemplo abaixo, criamos um frame, definimos um layout e inserimos dois botões :
win = new Frame(“Minha Janela”);
win.setLayout(new GridLayout(2,1);
win.add(new Button(“Botão 1”));
win.add(new Button(“Botão 2”));
• Podemos determinar o tamanho do frame utilizando o método resize.
![Page 12: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/12.jpg)
AWT - Frames
• Outro método é, ao invés de usar o resize, fazer com que o frame tenha o tamanho mínimo para conter todos os seus componentes ;
• O método pack implementa essa funcionalidade ;
• Devemos chamar esse método apenas depois de adicionarmos os componentes.
![Page 13: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/13.jpg)
AWT - Frames
• Um frame normalmente está invisível quando o criamos ;
• Para exibi-lo, precisamos usar o método setVisible do frame :
win.setVisible(true);
• Para esconder o frame utilizamos o mesmo método :
win.setVisible(false);
![Page 14: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/14.jpg)
AWT - Frame
• Apesar da janela aparecer, não há um método para destruí-la ;
• Caso ela estivesse visível na tela quando o browser fosse fechado, ela continuaria a rodar ;
• A única maneira então é destruir a tarefa no gerenciador de tarefas.
![Page 15: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/15.jpg)
AWT - Frame
• Para habilitarmos a capacidade da janela se destruir, precisamos capturar o evento do fechamento da janela (X no canto superior direito da janela).
![Page 16: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/16.jpg)
AWT - Frame
• Para capturarmos esse evento, tratamos um evento de WindowListner ou habilitamos a janela para tratar de evento;
• Para habilitarmos o tratamento de eventos (mais simples em código), utilizamos o seguinte código no construtor:
enableEvents(WindowEvent.WINDOW_CLOSING);
![Page 17: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/17.jpg)
AWT - Frame
• Também devemos implementar o seguinte método:
public void processWindowEvent(WindowEvent e)
{
switch (e.getID())
{
case e.WINDOW_CLOSING:
setVisible(false);
return;
default:
super.processWindowEvent(e);
}
}
![Page 18: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/18.jpg)
AWT - Menus
• Cada janela criada pode ter a sua própria barra de menu ;
• Cada barra de menu pode ter diversos menus ;
• Cada menu pode ter itens de menu ;
• Cada um desses itens são representados pelas classes MenuBar, Menu e MenuItem.
![Page 19: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/19.jpg)
AWT - MenusH iera rqu ia d os C o m p on e nte s d e u m M e nu
M en uB ar
M enu C h eckB o xM e n uItem
M en uItem
M e nu C o m p o ne nt
![Page 20: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/20.jpg)
AWT - Menus
• Para criar um menu para uma dada janela, crie uma nova instância da classe MenuBar:
MenuBar mbar = new MenuBar();
• Para ver este menu como o menu default para a janela, use o método setMenuBar() da classe Frame.
![Page 21: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/21.jpg)
AWT - Menus
• Para adicionar menus individuais é necessário criá-los e efetivamente adicioná-los ao menu :
Menu myMenu = new Menu(“Arquivo”);
mbar.add(myMenu);
• Os itens serão adicionados da esquerda para a direita.
![Page 22: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/22.jpg)
AWT - Menus
• Alguns sistemas fornecem um menu especial para ajuda, que é desenhado no canto direito da barra ;
• Podemos indicar que um menu em específico é um help menu utilizamos o método setHelpMenu() :
Menu help = new Menu(“Help”);
mbar.add(help);
mbar.setHelpMenu(helpmenu);
![Page 23: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/23.jpg)
AWT - Menus
• Se por algum motivo quisermos evitar que o usuário selecione um menu, utilizamos o método disable() do menu, e enable() para torná-lo disponível novamente :
myMenu.disable();
myMenu.enable();
![Page 24: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/24.jpg)
AWT - Menus
• Há quatro tipos de itens de menus que podemos adicionar :– MenuItem : itens regulares de menu ;– CheckBoxMenuItem : itens de menu que
podem ser marcados/desmarcados ;– Outros menus, com seus próprios itens ;– Separadores, que separam grupos uns dos
outros.
![Page 25: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/25.jpg)
AWT - Menus
• Itens de menu são adicionados usando a classe MenuItem ;
• Adicionamo-os a um menu com o método add :
Menu meumenu = new Menu(“Arquivo”);
meumenu.add(new MenuItem(“Abre”);
meumenu.add(new MenuItem(“Fecha”);
![Page 26: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/26.jpg)
AWT - Menus
• Para adicionarmos um submenu ao menu, criamos um novo menu e o adicionamos ao menu :
Menu meumenu = new Menu(“Arquivo”);
meumenu.add(new MenuItem(“Abre”);
meumenu.add(new MenuItem(“Fecha”);
Menu recente = new Menu(“Recentes”);
meumenu.add(recente);
![Page 27: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/27.jpg)
AWT - Menus
• Para criarmos um item de menu que seja selecionável, criamos uma intância de CheckBoxMenuItem ;
• O criamos como um item de menu e o adicionamos ;CheckBoxMenuItem coords = new
CheckBoxMenuItem(“Mostra Coordenadas”);
meumenu.add(coords);
![Page 28: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/28.jpg)
AWT - Menus
• O último elemento que podemos inserir num menu são os separadores ;
• É uma linha que separa grupos de itens de menu ;
• O separador é um item com um “-” :
MenuItem separador = new Menuitem(“-”);
meumenu.add(separador);
![Page 29: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/29.jpg)
AWT - Menus
• A ação de selecionar um item de menu gera um evento ;
• O tratamento deve ser feito no método com os listners ActionListner (itens de menu) e ItemListner (CheckboxMenuItem).
![Page 30: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/30.jpg)
Aplicações Standalone GráficasTamanho da Janela
• Para descobrirmos o tamanho, utilizamos o método getSize, e as variáveis width e height da clase Dimension retornada ;
• getSize().heigth retorna a altura do applet ;
• getSize().width retorna a largura do applet;
• Para modificarmos o tamanho da janela, utilizamos o método setSize.
![Page 31: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/31.jpg)
JAVA - Interfaces com AWT
• AWT fornece :– Um conjunto completo para interface gráfica,
incluindo menus, scrollbars, botões, etc;– Suporte a containers de interface gráfica;– Um sistema de eventos para gerenciar eventos de
sistema e do usuário entre os componentes AWT;
– Mecanismos para dispor componentes que permitem independência de plataforma.
![Page 32: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/32.jpg)
JAVA - Interfaces com AWT
• A idéia básica por trás de AWT é que um programa JAVA com interface gráfica é um aninhamento de componentes, começando na janela mais externa e descendo até o menor componente de interface;
• Todas as classes componentes da AWT estão no pacote java.awt.
![Page 33: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/33.jpg)
JAVA - Interfaces com AWT
• Os componentes que podemos trabalhar em AWT são :– Containers :são componentes AWT gerais que podem
conter outros componentes AWT, incluindo outros containers. O container mais comum é o panel, que é um container que pode ser exibido na tela.
– Canvas : Um canvas é uma superfície para “desenhos”. Mesmo que você possa “desenhar” em containers (todos exemplos até agora foram feitos assim), canvas são preferíveis para desenhar imagens ou outras operações gráficas.
![Page 34: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/34.jpg)
JAVA - Interfaces com AWT
– Componentes de Interface Usuário : São os botões, listas, menus pop-up, check boxes e outros elementos típicos de interface gráfica ;
– Componentes de Construção de Janela : São as janelas, frames, barras de menu, etc. Eles são separados dos componente anteriores por não serem usados em applets.
![Page 35: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/35.jpg)
JAVA - Interfaces com AWT
H iera rq u ia A W T
C a nv as
A p p le t
P an e l
F ram e D ia log
W ind ow
C o nta in er
T ex tF ie ld
T e x tC o m p on e nt B u tton
C o m p o ne nt
![Page 36: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/36.jpg)
AWT - Componentes Básicos
• Componentes Básicos de Interface :– O componente AWT mais simples é o
componente de interface usuário ;– É possível inserí-los sem grandes dificuldades
num applet no método init.
![Page 37: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/37.jpg)
AWT - Componentes Básicos
• Tipos de componentes IU básicos :– Labels ;– Botões ;– Check boxes ;– Menus de escolha ;– Text fields.
![Page 38: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/38.jpg)
AWT - Componentes Básicos
• Exemplo : Adicionando um botão a um applet :
public void init()
{
Button b = new Button(“OK”);
add(b);
}
![Page 39: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/39.jpg)
AWT - Componentes Básicos
• Apesar de ser possível utilizar o código anterior para inserir um componente, este é desaconselhável;
• Mais tarde, se for necessário referenciar o botão, não haverá uma instância acessível para os métodos do applet;
• É preferível ter um atributo da classe para armazenar as referências.
![Page 40: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/40.jpg)
AWT - Componentes Básicos
Class App extends Applet
{
Button b;
public void init()
{
b = new Button(“OK”);
add(b);
}
...
![Page 41: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/41.jpg)
AWT - Componentes Básicos
• O código anterior apenas cria uma instância de botão com o texto “OK” impresso sobre a sua face;
• O botão é simplesmente inserido no applet, na primeira posição livre (isto é, sem componentes).
![Page 42: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/42.jpg)
AWT - Labels
• Componente mais simples;
• Consiste de um texto (uma string) que é desenhada na tela;
• Um label não é editável, é apenas mais um componente na tela.
![Page 43: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/43.jpg)
AWT - Labels
• Um label tem vantagens sobre uma string ordinária desenhada na tela:– Não é preciso redesenhar labels manualmente,
AWT cuida disso;– Labels seguem um layout, e podem ser
alinhados com outros elementos (o que veremos mais tarde);
![Page 44: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/44.jpg)
AWT - Labels
• Para criarmos um label, utilizamos um dos seguintes construtores:– Label() : cria um label sem nenhum texto;– Label(String) : cria um label com um texto
especificado por String;– Label(String, int) : cria um label com o texto
especificado por String e alinhado.
![Page 45: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/45.jpg)
AWT - Labels
• No último construtor, o parâmetro inteiro indica um alinhamento do texto ;
• Tal parâmetro pode ser obtido da própria classe Label, através das constantes :– Label.LEFT;– Label.RIGHT;– Label.CENTER.
![Page 46: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/46.jpg)
AWT - Labels
• Métodos de um label :– getText() : retorna o texto associado a um label;– setText(String) : armazena um String específica
no label;– getAlignment() : retorna um inteiro
representando o alinhamento do label;– setAlignment(int) : Muda o alinhamento do
texto.
![Page 47: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/47.jpg)
AWT - Botões
• Botões são componentes simples de interface usuário que disparam alguma ação quando são pressionados ;
• Por exemplo, uma aplicação pode ter um botão EXIT que feche a aplicação quando pressionado.
![Page 48: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/48.jpg)
AWT - Botões
• Para criar-se um botão, podemos usar um dos seguintes construtores :– Button() : cria um botão sem nenhum texto
impresso na face ;– Button(String) : cria um botão com o texto
especificado em String impresso em sua face.
![Page 49: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/49.jpg)
AWT - Botões
• Exemplo para criar-se botões :
public void init()
{
add(new Button(“Ok”);
add(new Button(“Cancel”);
}
![Page 50: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/50.jpg)
AWT - Check Boxes
• Check boxes são componentes que tem dois estados : ligado ou desligado.
• A mudança de estado no check box dispara um evento;
• Seu estado será utilizado em um evento, como característica opcional.
![Page 51: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/51.jpg)
AWT - Check Boxes
• Check boxes são usadas de duas maneiras:– Não-exclusivas : dada uma série de
checkboxes, qualquer uma delas pode ser selecionada ;
– Exclusivas : em uma série de checkboxes, apenas uma delas pode ser selecionada (radio-buttons).
![Page 52: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/52.jpg)
AWT - Check Boxes
• Uma check box pode ser criada de uma das seguintes maneiras :– Checkbox() : cria uma checkbox, não selecionada ;
– Checkbox(String) : cria uma checkbox não selecionada com um texto especificado por String ;
– Checkbox(String, null, boolean) : cria uma checkbox que é selecionada ou não de acordo com o valor booleano passado.
![Page 53: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/53.jpg)
AWT - Check Boxes
• Exemplo : adicionando check boxes :Checkbox cb1, cb2, cb3;
void init()
{
add(cb1 = new Checkbox(“Bold”));
add(cb2 = new Checkbox(“Italic”));
add(cb3 = new Checkbox(“Underline”));
}
![Page 54: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/54.jpg)
AWT - Check Boxes
• Métodos de check boxes :– getLabel() : retorna a String associada ao label
da check box ;– setLabel() : Troca o texto do label da check
box;– getState() : Retorna true ou false de acordo com
o estado da check box ;– setState(boolean) : muda o estado da check box.
![Page 55: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/55.jpg)
AWT - Radio Buttons
• Radio buttons tem a mesma aparência que check boxes, porém apenas um deles pode ser selecionado de cada vez;
• Para adicionarmos um radio button precisamos primeiro criar um grupo para os radio buttons.
![Page 56: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/56.jpg)
AWT - Radio Buttons
• Tal grupo é criado num CheckboxGroup ;
• A declaração é feita utilizando-se o construtor da classe, que não recebe nenhum parâmetro :CheckboxGroup cbg = new CheckboxGroup();
![Page 57: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/57.jpg)
AWT - Radio Buttons
• Para criarmos um grupo de radio buttons, procederíamos da seguinte maneira :
public void init()
{
CheckboxGroup cbg = new CheckboxGroup();
add(new Checkbox(“Caro”, cbg, false));
add(new Checkbox(“Aceitável”, cbg, false));
add(new Checkbox(“Barato”, cbg, false));
}
![Page 58: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/58.jpg)
AWT - Radio Buttons
• Todos os método de check box são válidos para radio buttons ;
• Na verdade, radio buttons são um tipo de check buttons (os exclusivos).
![Page 59: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/59.jpg)
AWT - Radio Buttons
• Conhecendo o grupo, podemos verificar o estado dos componentes em busca de qual está marcado;
• Outra opção é comparar as referências de instância com a retornada por getCurrent, um método de CheckboxGroup.
![Page 60: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/60.jpg)
AWT - Menus de Escolha
• Menus de escolha são menus pull-down que fornecem uma lista da qual o usuário é permitido escolher um valor ;
• A funcionalidade é a mesma, mas entre diferentes plataformas a aparência pode mudar.
![Page 61: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/61.jpg)
AWT - Menus de Escolha
• Para criarmos um menu de escolha, criamos uma instância de Choice ;
• Para adicionarmos opções ao menu utilizamos o método addItem(String), que adiciona o texto indicado por String ao menu ;
• Feito isto adicionamos o menu ao panel.
![Page 62: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/62.jpg)
AWT - Menus de Escolha
• Exemplo :
public init()
{
Choice c = new Choice();
c.addItem(“Maçã”);
c.addItem(“Pêra”);
c.addItem(“Mamão”);
add(c);
}
![Page 63: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/63.jpg)
AWT - Menus de Escolha
• Mesmo após termos adicionado o menu ao painel, ainda podemos continuar adicionando Strings a ele.
![Page 64: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/64.jpg)
AWT - Menus de Escolha
• Método importantes :– getItem(int) : retorna a String do ítem indicado em int ;
– countItems() : retorna o número de itens no menu ;– getSelectedIndex() : retorna o índice do ítem
selecionado ;
– getSelectedItem(): retorna a string selecionada;– select(int) : seleciona o ítem indicado por int ;– select(String) : seleciona o ítem que possui String.
![Page 65: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/65.jpg)
AWT - Text Fields
• Todos os componentes vistos até agora permitem ações ou seleção de opções sobre eles;
• Text Fields permitem entrada de dados neles;
• São áreas nas quais é possível editar texto, ao contrário de labels, que apenas exibem textos.
![Page 66: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/66.jpg)
AWT - Text Fields
• Para criarmos um text field, utilizamos um dos seguintes construtores :– TextField () : cria um TextField que tem 0
caracters de largura(vai ser redimensionado para o tamanho do manager) ;
– TextField(int) : cria um text field vazio com int caracteres mínimo para mostrar caracteres;
![Page 67: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/67.jpg)
AWT - Text Fields
– TextField(String) : cria um text field que é preenchido com String. A largura é dimensionada pelo manager ;
– TextField(String, int) : cria um text field que é preenchido com String e que pode exibir o número indicado por int de caracteres.
![Page 68: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/68.jpg)
AWT - Text Fields
• Por exemplo, as seguintes linhas criam um text field com 30 caracteres de largura com a String “Entre seu nome” :
TextField tf = new TextField(“Entre seu nome”, 30) ;
![Page 69: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/69.jpg)
AWT - Text Fields
• Métodos importantes :– getText() : retorna o texto contido no text field ;– setText(String) : Coloca a String no text field ;– getColumns() : retorna a largura do text field ;– select(int, int) : seleciona o texto entre as posições
passadas nos inteiros (a partir de 0) ;
– selectAll() : seleciona o texto no text field ;– isEditable() : retorna true ou false se o campo for
editável ou não ;
![Page 70: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/70.jpg)
AWT - Text Fields
– setEditable(boolean) : seta o texto para ser editado (true, valor default) ou não (false) ;
– getEchoChar() : retorna o caracter usado para mascarar entrada ;
– setEchoCharacter() : seta o caracter usado para mascarar a entrada (estilo senha) ;
– echoCharIsSet() : retorna true ou false se há um caracter de máscara selecionado.
![Page 71: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/71.jpg)
AWT - Text Fields
• Ao editarmos o texto contido no TextField são gerados dois eventos:– Um para o indicar a tecla pressionada;– Um segundo para indicar que a tecla foi
liberada.
![Page 72: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/72.jpg)
AWTEventos com Componentes
• Apesar de ser possível no exercício anterior até editar um texto no text edit ou selecionar o check box, a aplicação não possui nenhuma funcionalidade ;
• Ao pressionarmos o botão, não ocorre nenhuma ação aparente no programa ;
• Porém há um evento AWT associado ao pressionamento do botão.
![Page 73: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/73.jpg)
AWTEventos com Componentes
• Para realizarmos alguma ação ao pressionarmos o botão, precisamos tratar o evento ;
• Eventos ocorrem quando um componente é ativado (pressionado, selecionado, texto é digitado, etc).
![Page 74: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/74.jpg)
AWTEventos com Componentes
• A noção de tratamento de eventos é similar a empregada em outros ambientes gráficos, como Windows 95 ;
• Uma nota importante no tratamento de eventos é que estes trabalham de maneira semelhante a interrupções.
![Page 75: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/75.jpg)
AWTEventos com Componentes
• Ao invés do programa monitorar o pressionamento de um botão ou um caracter ser digitado num text field, o evento “avisa” o programa ;
• Isso muda o estilo de programação, pois ao invés do programa esperar por uma entrada de dados, ele fica ocioso até que a entrada seja disponibilizada para ele.
![Page 76: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/76.jpg)
AWTEventos com Componentes
• Todos os componentes de interface (a exceção de labels, que não geram eventos) tem diferentes tipos de ações;;
• Botões, por exemplo, geram ações quando são pressionados.
![Page 77: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/77.jpg)
AWTEventos com Componentes
• Check boxes, sejam exclusivas ou não exclusivas, geram ações quando seu estado é modificado;
• Menus de escolha geram uma ação quando um elemento é selecionado.
![Page 78: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/78.jpg)
AWTEventos com Componentes
• Text fields geram uma ação quando é pressionada alguma tecla dentro deles ;
• Note que se num text field o usuário pressionar a tecla TAB para mudar de componente (ou fazê-lo utilizando o mouse) não é gerado nenhum evento.
![Page 79: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/79.jpg)
Eventos AWT
• Para o JDK1.0.2, o tratamento de eventos era feito baseado no método handleEvent (eventos simples) e action (eventos em componentes);
• O eventos eram processados apenas em instâncias do tipo Component;
• JDK1.1.X trabalha com listeners.
![Page 80: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/80.jpg)
Eventos AWT
• Para cada tipo de componente/elemento há um tipo de listener associado;
• Para que um applet possa receber eventos de um certo tipo, é necessário:– 1: possuir um listener instalado no applet;– 2: o componente ou elemento deve ter indicado
nele QUEM é o listener das ações sobre ele, no caso, o applet.
![Page 81: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/81.jpg)
Eventos AWT
• Ao contrário de JAVA 1.0.2, podemos definir elementos de uma classe qualquer para gerenciar os eventos;
• Também podemos, como em JAVA1.0.2, definir elementos derivados de Component ou de outros componentes (como botão e outros), obtendo funcionalidades próprias.
![Page 82: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/82.jpg)
Eventos AWT
• Para que uma classe possa “escutar” eventos, ela deve implementar um listener;
• um listener em java é disponibilizado em uma interface;
• Veremos mais tarde como funcionam interfaces, basta por enquanto saber que estes disponibilizam atributos e métodos para adicionar funcionalidades em uma classe.
![Page 83: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/83.jpg)
Eventos AWT
• Para que uma classe implemente uma interface, utilizamos a palavra reservada implements;
• Esta palavra é um modificador da classe;
• Para implementarmos uma classe que implemente ActionListener, a declaramos:
class Aplicacao extends Applet implements Action Listener
![Page 84: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/84.jpg)
Eventos AWT
• Tipos de listener (e quais tipos tratam): – ActionListener: Button, List, MenuItem e
TextField;– ItemListener: Checkbox, CheckboxMenuItem e
Choice;– WindowListener: Dialog e Frame;– ComponentListener: Dialog e Frame;– AdjustmentListner: Scrollbar;
![Page 85: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/85.jpg)
Eventos AWT
– MouseMotionListener: mov. do mouse e drag;– MouseListener: pressionar botões;– KeyListner: Component;– FocusListner: Component;– ContainerListener;– TextListener.
• Os listeners estão no pacote java.awt.event;
![Page 86: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/86.jpg)
ActionListener
• Este listener é invocado quando ocorerm eventos em instâncias de Button (pressionamento), List (seleção de um ítem) e MenuItem;
• O método invocado quando é executada uma ação é actionPerformed, que recebe uma instância de Actionvent.
![Page 87: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/87.jpg)
ActionListener
• Para tratarmos de eventos capturados por um ActionListener, devemos:– 1: a classe deve impelmentar ActionListener;– 2: o componente deve ter seu listener mudado
para a classe em questão;– 3: o método actionPerformed deve ser
implementado e possuir código para tratar do evento.
![Page 88: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/88.jpg)
ActionListener
• Por questões de elegância, o melhor é que o código do actionPerformed apenas capture o evento e faça um tratamento para descobrir QUAL é o evento;
• O tratamento do evento em si deve ser feito em um método à parte, para evitar a geração de código confuso e difícil de tratar mais tarde.
![Page 89: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/89.jpg)
ActionListener
• Exemplo de classe:public class App extends Applet implements ActionListener
{
Button b1;
void init()
{
add(b1=new Button(“OK”));
b1.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
if( (Button)evt.getSource() == b1)
{ // Processa o evento }
}
}
![Page 90: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/90.jpg)
ItemListener
• Este listener serve trata dos seguintes tipos de eventos:– Mudança de estado em um Checkbox;– Mudança de estado em um Choice;– Mudança de estado em um ítem de menu do
estilo check.
![Page 91: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/91.jpg)
ItemListener
• Para tratarmos de eventos capturados por ItemListener, devemos:– 1: a classe deve implementar ItemListener;– 2: o componente deve ter seu listener mudado
para a classe em questão;– 3: o método itemStateChanged deve ser
implementado e possuir código para tratar do evento.
![Page 92: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/92.jpg)
ItemListener
• O método itemStateChanged recebe ao ser invocado uma instância de ItemEvent;
• Este objeto contém informações importantes do evento, como a font que o gerou além do tipo do evento;
• Para recuperar-se a fonte, utiliza-se o método getSource.
![Page 93: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/93.jpg)
ItemListener
• Para determinarmos o tipo do evento (importante em alguns casos), utilziamos o método getID;
• Os valores retornados possíveis são:– ItemEvent.SELECTED: o elemento foi
selecionado;– ItemEvent.DESELECTED: o elemento foi
desmarcado.
![Page 94: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/94.jpg)
ItemListener
• Exemplo de classe:public class App extends Applet implements ItemListener
{
Checkbox c1;
void init()
{
add(c1=new Checkbox(“Opção”));
c1.addItemListener(this);
}
public void itemStateChanged(ItemEvent evt)
{
if( (Checkbox)evt.getSource() == c1)
{ // Processa o evento }
}
}
![Page 95: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/95.jpg)
Operador instanceof
• O evento gerado pode ser sobre diversos componentes, de diversos tipos;
• Uma maneira para organizar o processo consiste em verificar a qual classe a fonte do evento pertence;
• Isto pode, além de organizar, acelerar o processo, separando os componentes em grupos.
![Page 96: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/96.jpg)
Operador instanceof
• Este operador é o instanceof, e sua sintaxe é a seguinte:<instância> instanceof <Classe>
• O resultado da operação é true se instância for uma instância de Classe.
![Page 97: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/97.jpg)
Operador instanceof
• Por exemplo:if( fonte instanceof Button)
{
...
}
• Irá entrar na condicional se fonte for uma instância de Button.
![Page 98: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/98.jpg)
KeyListener
• Destinado a tratar de eventos relacionados a teclado;
• Se aplica sobre instâncias de Component;
• Há três tipos de eventos possíveis:– Pressionamento de uma tecla;– Liberação de uma tecla;– Digitar uma tecla (pressionar seguido de
liberar).
![Page 99: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/99.jpg)
KeyListener
• Para cada um destes tipos de evento, há um método associado:– keyTyped;– keyPressed;– keyReleased.
![Page 100: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/100.jpg)
KeyListener
• Todos os métodos recebem como argumento uma instância de KeyEvent;
• Alguns métodos importantes:– getKeyChar: retorna o código ASCII da tecla
pressionada;– getKeyCode: retorna o código virtual da tecla
pressionada;– getKeyText: retorna um texto associado à tecla
pressionada.
![Page 101: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/101.jpg)
KeyListener
• E herdados da classe InputEvent:– isAltDown: retorna true ou false dependendo da
tecla ALT estar pressionada ou não;– isCtrlDown: para CONTROL, similar ao acima;– isShifDown: ídem para SHIFT.
![Page 102: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/102.jpg)
KeyListener
• Exemplo de classe:public class App extends Applet implements KeyListener
{
TextArea t1;
void init()
{
add(t1=new TextArea());
t1.addKeyListener(this);
}
public void keyPressed(KeyEvent evt)
{
if( (TextArea)evt.getSource() == t1)
{ // Processa o evento }
}
}
![Page 103: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/103.jpg)
KeyListener
• Caso seja implementado apenas um dos métodos definidos pela interface, é necessário implementar os outros também;
• É uma obrigação, para que a classe seja possível de ser compilada (não há código associado na interface);
• O código pode ser vazio, mas há a necessidade de sua criação.
![Page 104: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/104.jpg)
AWT - Panels e Layouts
• Panels (applets são panels) podem conter componentes de interface ou outros panels ;
• A pergunta é : como organizar esses elementos?
• Apenas adicioná-los na tela pode ser suficiente em termos de funcionalidade, mas em termos de aparência não.
![Page 105: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/105.jpg)
AWT - Panels e Layouts
• Normalmente, em sistemas orientados a janelas, elementos são organizados utilizando-se coordenadas absolutas em pixels ;
• Uma interface AWT pode ser exibida numa variedade muito grande de sistemas, com diferentes tipos de fontes de sistema e métricas.
![Page 106: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/106.jpg)
AWT - Panels e Layouts
• Dessa maneira, JAVA não trabalha preferencialmente com referências absolutas a coordenadas de tela ;
• JAVA possui layout managers que permitem que componentes sejam distribuídos na tela sem necessidade de coordenadas absolutas.
![Page 107: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/107.jpg)
AWT - Layout Manager
• A aparência de como os componentes AWT são exibidos na tela depende de dois fatores:– Como os componentes são adicionados ao painel
que os possui (ordem dos add);
– O layout manager que controla a disposição dos componentes que são adicionados. O manager determina como porções da tela serão selecionadas e como os componentes serão adicionados.
![Page 108: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/108.jpg)
AWT - Layout Manager
• Cada panel na tela pode ter seu próprio layout manager;
• Se aninharmos panels um dentro do outro e utilizarmos os devidos layout managers em cada um deles, obtemos uma interface independente de plataforma que irá ter uma aparência semelhante onde quer que o applet rode.
![Page 109: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/109.jpg)
AWT - Layout Manager
• AWT possui cinco tipos de layout manager:– FlowLayout;– GridLayout;– BorderLayout;– CardLayout;– GridBagLayout.
![Page 110: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/110.jpg)
AWT - Layout Manager
• Para criar um layout manager para um panel, basta criar uma instância do layout manager e utilizar o método setLayout para o panel:
• Ex :public void init
{
setLayout(new FlowLayout());
}
![Page 111: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/111.jpg)
AWT - Layout Manager
• Como a criação de componentes de interface (instanciação) e inserção no panel são preferíveis de serem feitas no método init do applet, a definição de um layout segue a mesma regra;
• Para que os componentes sigam o layout, temos que primeiro criar o layout e depois inserir os componentes.
![Page 112: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/112.jpg)
AWTLayout Manager - FlowLayout
• FlowLayout é o layout mais simples em JAVA (default) ;
• Usando flow layout os componentes são inseridos um ao lado do outro, da esquerda para a direita, linha a linha ;
• Caso não seja possível inserir um componente na mesma linha, o layout troca para a próxima linha.
![Page 113: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/113.jpg)
AWTLayout Manager - FlowLayout
• Um layout pode ter um alinhamento, que pode ser :– FlowLayout.CENTER : valor default, os
componentes são inseridos centralizados ;– FlowLayout.LEFT : os componentes são
inseridos alinhados à esquerda ;– FlowLayout.RIGHT : os componentes são
inseridos alinhados à direita.
![Page 114: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/114.jpg)
AWTLayout Manager - FlowLayout
• Também podemos especificar um espaçamento (gap) vertical e horizontal entre os componentes ;
• Esse espaçamento será utilizado para separar um elemento do outro, e é dado em pixels ;
• O valor de espaçamento é de 3 pixels.
![Page 115: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/115.jpg)
AWTLayout Manager - FlowLayout
• Em FlowLayout, cada componente tem seu tamanho definido por si só (tamanho do texto do botão, número de caracteres do Textedit, etc).
![Page 116: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/116.jpg)
AWTLayout Manager - FlowLayout
• Há três contrutores :– FlowLayout() : cria um flow layout centralizado
e com gap de três pixels ;
– FlowLayout(int alinha) : cria um flow layout com o alinhamento especificado.
– FlowLayout(int alinha, int hor, int ver) : cria um flow layout com o alinhamento especificado em alinha, e gap horizontal e vertical especificado por hor e vert, respectivamente.
![Page 117: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/117.jpg)
AWTLayout Manager - GridLayout
• Grid layouts oferecem maior controle no posicionamento de componentes no panel;
• Ele trabalha numa matriz (grid), onde os componentes são inseridos;
• Cada componente adicionado é inserido numa célula, começando pela célula acima mais a esquerda, indo para a direita e trocando de linha quando necessário.
![Page 118: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/118.jpg)
AWTLayout Manager - GridLayout
• Esse tipo de layout apesar de ser mais poderoso em termos de onde os componentes são posicionados, tem a desvantagem de que o componente preenche TODA a área da célula reservada a ele no grid.
![Page 119: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/119.jpg)
AWTLayout Manager - GridLayout
• O grid ocupa toda a área do applet ;
• Também podemos definir um gap entre cada componente num grid layout.
![Page 120: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/120.jpg)
AWTLayout Manager - GridLayout
• Contrutores :– GridLayout(int lin, int col) : cria um grid layout
com lin linhas e col colunas.– GridLayout(int lin, int col, int hgap, int vgap) :
cria um grid layout don lin linhas e col colunas, tendo um gap horizontal hgap e vertical hgap.
![Page 121: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/121.jpg)
AWTLayout Manager - BorderLayout
• Border layouts diferem muito de flow layouts e grid layouts, porque ao invés de inserirmos componentes numa ordem, os inserimos com uma direção geográfica.
![Page 122: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/122.jpg)
AWTLayout Manager - BorderLayout
• Tais direções podem ser :– South (para baixo);– West (a esquerda);– North (para cima) ;– East (a direita);– Center.
![Page 123: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/123.jpg)
AWTLayout Manager - BorderLayout
• É possível utilizarmos gaps também, mas isto irá reduzir o espaço disponível para outros componentes;
• Um problema com este tipo de layout manager é que é possível inserir apenas um componente por região geográfica.
![Page 124: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/124.jpg)
AWTLayout Manager - BorderLayout
• Para utilizarmos o layout, primeiro o selecionamos e inserimos elementos (add) utilizando as coordenadas.
• Ex :public void init() {
setLayout(new BorderLayout());
add(“North”, new Button(“Um”));
add(“East”, new Button(“Dois”));
add(“South”, new Button(“Três”));
....
}
![Page 125: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/125.jpg)
AWTLayout Manager - CardLayout
• Card layouts se comportam de maneira BEM diferente dos outros layouts ;
• Num layout, todos os componentes são visíveis simultaneamente ;
• Num card layout apenas um dos componentes é visível de cada vez.
![Page 126: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/126.jpg)
AWTLayout Manager - CardLayout
• Card layouts são como tab controls na API Win 32;
• Para navegar entre cada card, há métodos para avançar para o próximo, anterior, primeiro e último;
• É interessante adicionar-se panels dentro do card ao invés de um componente simples, de maneira que cada card tenha sua aparência.
![Page 127: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/127.jpg)
AWTLayout Manager - CardLayout
• Quando criamos um card layout, damos um nome para cada card;
• Podemos selecionar um card para ser exibido utilizando o seu nome;
• Uma utilidade para cards são programas de instalação (estilo Install Shield).
![Page 128: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/128.jpg)
AWTLayout Manager - CardLayout
setLayout(new CardLayout());
// adiciona os cards
Panel um = new Panel();
add(“primeiro”, um);
Panel dois = new Panel();
add(“segundo”, dois);
Panel tres = new Panel();
add(“terceiro”, tres);
// mostra os panels
show(this, “segundo”);
show(this, “terceiro”);
previous(this, first);
first(this);
![Page 129: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/129.jpg)
AWTAninhando Panels e Componentes
• Apenas adicionar componentes num applet é suficiente para aplicações simples;
• Porém em aplicações complexas, o uso de um simples layout não é suficiente ;
• Nesses casos, precisamos aninhar um panel dentro de um layout.
![Page 130: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/130.jpg)
AWTAninhando Panels e Componentes
• Dessa maneira, obtemos as seguintes características :– Applets com layouts complexos, visto que cada
um dos panels possui seu próprio layout;– Cada panel pode ter sua própria cor de fundo;– Cada panel pode processar seus eventos ou
repassá-los para um nível superior.
![Page 131: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/131.jpg)
AWTAninhando Panels e Componentes
• Para criarmos um panel dentro de um applet, o código abaixo seria suficiente (apesar de não ter muita funcionalidade por enquanto) :
setLayout(new GridLayout(1, 2, 10, 10);
Panel panel1 = new Panel();
Panel panel2 = new Panel();
add(panel1);
add(panel2);
![Page 132: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/132.jpg)
AWTAninhando Panels e Componentes
• Lembrando, os eventos são tratados por listeners;
• Destas maneira, não importa em qual panel e em qual ordem hierárquica esteja o componente, o listener irá tratar do evento;
• Isto difere de JAVA1.0.2, aonde apenas panels poderiam tratar os eventos, e estes eram repassados na hierarquia.
![Page 133: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/133.jpg)
AWTAninhando Panels e Componentes
• Para organizar os panels, é interessante extender a classe panel e criar uma classe especializada para cada um dos panels a serem aninhados ;
• Não é necessário obrigatoriamente, mas caso seja necessário um método paint específico para o panel, precisamos então criar a classe extendida e sobrescrever o método paint default.
![Page 134: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/134.jpg)
AWTAninhando Panels e Componentes
• Um panel aninhado não tem método init, e muito menos este é chamado, as inicializações devem ser feitas no construtor.
![Page 135: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/135.jpg)
AWTLayout Manager - GridBagLayout
• É o layout manager mais poderoso;
• Ao mesmo tempo é o mais complexo de ser utilizado;
• Seu funcionamento lembra o de grid layout;
• Porém é possível controlar o tamanho do componente na célula, espaçamento, proporção entre linhas e colunas e o arranjo do componente nas células.
![Page 136: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/136.jpg)
AWTLayout Manager - GridBagLayout
• Para criarmos um grid bag layout, utilizamos duas classes :– GridBagLayout, que é o layout manager em si;
– GridBagConstraints, que definem as propriedades de cada componente no grid, como alinhamento, dimensões, etc.
• O relacionamento entre o grid bag, as restrições e os componentes definem o layout.
![Page 137: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/137.jpg)
Exemplo - Projetando o Grid
• Projetar o grid ;
• Crie o método :void montaRestricoes(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy, int fill)
{
gbc.gridx = gx ;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
gbc.fill = fill;
}
![Page 138: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/138.jpg)
Exemplo - Projetando o Grid
• Crie no método init :
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
setLayout(gbl);
![Page 139: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/139.jpg)
Exemplo - Projetando o Grid
• Os valores possíveis para fill são os seguintes :– HORIZONTAL : o componente deve preencher o grid
na horizontal na sua totalidade, a altura é a mínima do componente (interessante para nosso text field);
– VERTICAL : o componente preenche na totalidade a altura do grid. A largura é a mínima do componente ;
– BOTH : o componente preenche o grid por completo em ambas as direções ;
– NONE : o componente possuírá seu tamanho mínimo.
![Page 140: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/140.jpg)
Exemplo - Projetando o Grid
• No método monta restrições :– O primeiro parâmetro é uma referência a
gridBagConstraints ;– Os dois parâmetros seguintes indicam QUAL
posição no grid o elemento ocupa ;– O quarto e quinto indicam quantas células ele
ocupa na vertical e horizontal ;– Os dois parâmetros seguintes dizem a proporção
do uso do espaço alocado.
![Page 141: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/141.jpg)
Exemplo - Projetando o Grid
– Por fim, o último parâmetro, fill, indica o preenchimento do componente na célula;
![Page 142: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/142.jpg)
Exemplo - Projetando o Grid
• Crie as restrições para cada um dos componentes e adicione-os ;
• Mais tarde veremos como ajustar as proporções;
![Page 143: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/143.jpg)
Exemplo - Projetando o Grid
• Componentes que fazem parte:– Label: “Usuário” ;– TextField;– checkbox: “Visível a outros usuários”;– Button: “Ok”.
![Page 144: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/144.jpg)
Exemplo - Projetando o Grid• Posicionamento (todos uma célula na vertical):
– Label : (0,0), ocupa 1 célula ;
– TextEdit : (1,0), ocupa 1 célula ;
– CheckBox: (0,1), ocupa 2 células na horizontal
– Botão : (0,2), ocupa 2 células. na horizontal
Exemplo:
montaRestricoes(gbc, 0, 0, 1, 1, 100, 100, GridBagConstraints.BOTH) ;
gbl.setConstraints(label, gbc);
add(label);
• Execute e verifique o resultado.
![Page 145: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/145.jpg)
Código
import java.awt.*;
import java.applet.*;
public class BridBag extends Form1
{
Label label;
TextField textField;
Checkbox checkbox;
Button button;
public void init()
{
super.init();
addNotify();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints gbc = new GridBagConstraints();
setLayout(gbl);
![Page 146: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/146.jpg)
Código
label = new Label("Usuário:");
textField = new TextField();
checkbox = new Checkbox("Visível a outros usuários", null, true);
button = new Button("Ok");
montaRestricoes(gbc, 0, 0, 1, 1, 100, 100,GridBagConstraints.BOTH);
gbl.setConstraints(label, gbc);
add(label);
montaRestricoes(gbc, 1, 0, 1, 1, 100, 100,GridBagConstraints.BOTH);
gbl.setConstraints(textField, gbc);
add(textField);
montaRestricoes(gbc, 0, 1, 2, 1, 100, 100,GridBagConstraints.BOTH);
gbl.setConstraints(checkbox, gbc);
add(checkbox);
montaRestricoes(gbc, 0, 2, 2, 1, 100, 100,GridBagConstraints.BOTH);
gbl.setConstraints(button, gbc);
add(button);
}
![Page 147: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/147.jpg)
Código
void montaRestricoes(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy, int fill)
{
gbc.gridx = gx ;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
gbc.fill = fill;
}
}
![Page 148: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/148.jpg)
Exemplo - Projetando o Grid
• Podemos observar claramente a divisão do grid entre os componentes ;
• Agora precisamos modificar as proporções do grid para que os componentes sejam distribuídos corretamente ;
• A idéia da proporção é em relação a soma total da linha/coluna.
![Page 149: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/149.jpg)
Exemplo - Projetando o Grid
• Devemos então distribuir pesos para os componentes ;
• Ex :– Label : 20,30 ;– Text Field : 80, 30 ;– Checkbox : 100, 20 ;– Button : 100, 30.
• Execute o programa e observe o resultado.
![Page 150: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/150.jpg)
Exemplo - Projetando o Grid
• Agora, substitua na linhas de criação das restrições o último parâmetro para GridBagConstraints.NONE;
• Agora os componentes encontram-se com o seu tamanho mínimo;
• Exeperimente o valor GridBagConstraints.VERTICAL para o TextField.
![Page 151: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/151.jpg)
Exemplo - Projetando o Grid
• Podemos utilizar o campo fill de GridBagConstraints para cada uma das células, obtendo um layout complexo dessa maneira.
• Podemos também incluir panels nessas células.
![Page 152: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/152.jpg)
AWT - Mais Componentes
• Além dos componentes básicos de interface, temos alguns outros componentes :– Text Areas ;– Scrolling Lists ;– Scrollbars ;– Sliders ;– Canvas.
![Page 153: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/153.jpg)
AWT - TextArea
• TextAreas são conceitualmente iguais a text fieds;
• Também é possível inserir texto e obter o texto armazenado na text area;
• A diferença para um text field é que text area trabalha com múltiplas linhas de edição.
![Page 154: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/154.jpg)
AWT - TextArea
• Os construtores são :– TextArea() : cria um text area vazio com tamanho zero,
que será redimensionado baseado no layout.
– TextArea(String str) : cria um text area com a String str.
– TextArea(int lin, int col) : cria um text area vazio com tamanho de lin linhas e col colunas.
– TextArea(String, int lin, int col) : cria um text area com a String str que tem o tamanho de lin linhas e col colunas.
![Page 155: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/155.jpg)
AWT - TextArea
• Os métodos específicos (além dos de text field) são:– getColumns() : retorna um valor inteiro que
contém o número de colunas da text area ;– getRows() : retorna um valor inteiro que contém
o número de linhas da text area ;– insertText(String str, int pos) : insere a String str
na posição indicada por pos (valores iniciando em 0).
![Page 156: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/156.jpg)
AWT - TextArea
– replaceText(String str, int pos1, int pos2) : Substitui o texto entre as posições pos1 e pos2 pelo texto em str.
– appendText(String str) : concatena a String str depois da última posição de caracter na text area.
![Page 157: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/157.jpg)
AWT - TextArea
• Eventos:– KeyListner;– FocusListner.
![Page 158: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/158.jpg)
AWT - List
• Choice menus permite seleciona elementos de uma lista ;
• Lists são semelhantes a choice menus, diferindo por dois pontos :– Não são menus pop-up. É uma lista da qual podemos
escolher um ou mais itens. Se o número de intens é maior que a lista comporta, uma barra de rolagem automaticmante é disponibilizada ;
– Podemos selecionar um ou mais elementos na lista, ao passo que choice menus escolhemos apenas um.
![Page 159: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/159.jpg)
AWT - List
• Ações sobre uma list ocorrem quando clicamos duas vezes com o mouse sobre um elemento ;
• Há eventos associados ao marcarmos ou desmarcarmos um elemento, porém são tratados de uma maneira um pouco diferente das ações vistas anteriormente.
• O evento é do tipo (id) LIST_SELECTED e LIST_DESELECT.
![Page 160: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/160.jpg)
AWT - List
• Métodos construtores :– List() : cria uma lista vazia, que permite
selecionar apenas um elemento de cada vez.– List(int num, boolean mult) : cria uma lista
vazia que permite ver simultâneamente na lista num elementos (não há limite quanto ao número de elementos a serem adicionados). O argumento mult indica se a lista permite múltipla seleção (true) ou não (false).
![Page 161: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/161.jpg)
AWT - List
• Métodos :– getItem(int num) : retorna a String associada a
posição num da lista ;– countItems() : retorna o número de itens na lista
;– getSelectedIndex() : retorna o índice do
elemento selecionado (para listas sem seleção múltipla) ;
![Page 162: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/162.jpg)
AWT - List– getSelectedIndexes() : retorna uma matriz dos
elementos selecionados (apenas para listas com seleção múltipla) ;
– getSelectedItem() : retorna a String do ítem selecionado (seleção única) ;
– getSelectedItems() : retorna uma matriz de Strings dos itens selecionados (seleção múltipla) ;
– select(int num) : seleciona o ítem indicado por num ;– select(String str) : seleciona o ítem com a String str.
![Page 163: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/163.jpg)
AWT - List
• Eventos:– ItemListner.
![Page 164: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/164.jpg)
AWT - Scrollbar
• Text areas e lists vem com scrollbars associadas ;
• Também podemos criar scrollbars para manipular intervalos de valores ;
• Scrolbars são utilizadas para selecionar valores entre um máximo e um mínimo.
![Page 165: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/165.jpg)
AWT - Scrollbar
• Os construtores são :– Scrollbar() : cria uma scrollbar com valores
máximo e mínimo 0, na vertical.– Scrollbar(int or) : cria uma scrollbar com
valores máximos e mínimo 0, porém com a orientação especificada por or. Essa orientação pode ser Scrollbar.VERTICAL ou Scrollbar.HORIZONTAL.
![Page 166: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/166.jpg)
AWT - Scrollbar
– Scrollbar(int or, int init, int esp, int max, int min) : cria uma scrollbar, seguindo :
• A orientação especificada por or ;
• O valor inicial da indicação, dado por init (o valor deve estar entre os valores máximos e mínimos) ;
• A espessura da caixa de exibição da scrollbar. Quanto maior a caixa, maior a faixa exibida ;
• Os valores máximo e mínimo inidicados por max e min respectivamente.
![Page 167: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/167.jpg)
AWT - Scrollbar
• Métodos :– getMaximum() : retorna o valor máximo da
scrollbar ;– getMinimum() : retorna o valor mínimo da
scrollbar ;– getOrientation() : retorna a orientação da
scrollbar ;– getValue() : retorna o valor atual da scrollbar.
![Page 168: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/168.jpg)
AWT - Scrollbar
– setValue(int i) : muda o valor da scrollbar para o valor indicado por i ;
– setLineIncrement(int inc) : seta o valor do incremento quando clicamos com o mouse sobre as setas da scrollbar para inc ;
– getLineIncrement() : retorna o valor do incremento quando clicamos nas setas.
![Page 169: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/169.jpg)
AWT - Scrollbar
– setPageIncrement(int inc) : muda o valor do incremento no valor da scrollbar quando clicamos no corpo desta ;
– getPageIncrement() : retorna o valor do incremento de quando clicamos no corpo da scrollbar.
![Page 170: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/170.jpg)
AWT - Scrollbar
• Eventos:– AdjustmentListner.
![Page 171: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/171.jpg)
AWT - Canvas
• Quando desenhamos um texto num applet nos exemplos anteriore, o fizemos sobre um panel ;
• Um panel serve para diversas finalidades, entre elas desenhar sobre ele ;
• Um canvas é um elemento que serve praticamente APENAS para desenhar sobre eles.
![Page 172: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/172.jpg)
AWT - Canvas
• É um componente sobre o qual temos eventos ;
• Canvas não podem conter componentes sobre eles;
• Podemos criar animações nestes ou mostrar imagens ;
• Se um panel for destinado apenas para desenhos, um canvas é mais apropriado e mais leve em termos de execução.
![Page 173: Aplicações JAVA Modo Gráfico Standalone Paulo Vinícius Wolski Radtke PUC PR - radtke@ppgia.pucpr.br](https://reader033.vdocuments.net/reader033/viewer/2022051615/552fc105497959413d8c0354/html5/thumbnails/173.jpg)
AWT - Canvas
• Para criarmos um canvas bastaria num método init :
Canvas canvas = new Canvas();
add(canvas);