[anterior,
índice,
seguinte]
AWT
AWT (Abstract Window Toolkit) é biblioteca da classe java que implementa
interface do applet através de janelas. Note que, o applet pode
ser implementado para ser executado fora da página web e por isso,
AWT pode ser usado para implementar interface de aplicativos escritos em
java. Nos veremos ainda, como desenvolver applets que podem ser executador
fora da página.
Introdução ao AWT
AWT é um conjunto de recursos gráficos comumente conhecidos
pelos sistemas de interface usando janelas. Nos podemos criar janelas,
botões, janela de diálogos, etc.
Estas ferramentas possui uma iherarquia, que será explicado
mais em diante.
Por enquanto, apenas aprenderemos como usar o AWT que está baseado
no interface orientado a enventos.
Programação orientado a eventos é uma técnica
de programação na qual, costruimos o programa através
de regras (métodos) a ser executados cada vez que o evento diferente
ocorrer. Por exemplo, precionar teclado, mover mouse, clicar no botão,
receber dados pela rede, todos são eventos. Cada vez que um desses
eventos ocorrer, o método correspondente é ativado.
O elemento de AWT são na maioria, componentes. isto quer dizer
que eles podem ser adicionados numa janela (frame) ou painel (panel). Para
começar, precisamos de uma janela ou uma área em branco para
poder colocar os botões e menus.
O applet ja possui sua área própria que é um retângulo
sem nada, denominado de
panel. Então, ele pode começar
a colocar (adicionar) botões e outros componentes. Se quiser sub-dividir,
basta acrescentar panel's.
Quando ocorrer qualquer evento no componente do AWT, o método
denominado de
action é chamado. O que nos precisamos fazer
é implementar o método action para identificar o evento ocorrido
e manipular corretamente.
Em vez de ficar discutindo monte de coisas, vamos para parte prática.
Suponhe que queremos adicionar botões no panel do applet (na parte
de
escrevendo
o applet, a área de trabalho de applet dentro da página
HTML foi referenciado como sendo janelas, mas referência correta
é painel).
Botão
Botão é uma classe denominado de Button e possui um nome.
O evento do botão é cliqui do mouse sobre ele, ou seja, quando
mouse é clicado sobre ele, chama o método
action.
Ele possui três métodos principais:
public Button() // construtor. Cria o botão
public Button(String label) // Cria o botão,
já dando nome para ele.
public void setLabel(String label) // Atribui
nome para botão
public String getLabel() // Retorna o nome do
botão
Para inserir algo no componente de AWT, utiliza o método add
associado a ele. Se o add for chamado sem especificação do
objeto, é considerado objeto corrente. Agora, vamos construir um
applet simples que altera a cor do panel do applet, clicando sobre botão.
import java.awt.*;
import java.applet.*;
public class Botao extends Applet {
public void init(){
add(new Button("Azul"));
add(new Button("Vermelho"));
}
public void boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) {
String label = (String)quem;
if(label == "Azul")
setBackground(Color.blue);
else if (label == "Vermelho")
setBackground(Color.red));
else
return false;
repaint();
return true; // não chama mais nenhum action seguinte
}
else
return false; // evento não foi de botão. Próximo action é chamado.
}
}
Vamos esclarecer as coisas. Primeiro, o método init() que é
executado quando o applet inicia, adiciona dois botões no panel
da applet, com nome "Azul" e "Vermelho" respectivamente.
Quando o botão for clicado, ocorre o evento no botão,
que não possui regras (métodos) associados. Quando o objeto
não possui método para cuidar de evento (caso do botão
acima), o evento será passado para a elemento que contém
ele. No caso do exemplo acima, o botão foi adicionado no panel da
applet e logo, o action da applet é chamado.
Os métodos de tratamento do evento é:
public boolean action(Event evento, Object quem)
onde o parâmetro evento contém informações
sobre evento e quem é o objeto na qual o evento ocorreu.
Note que, o evento de mouse e teclado discutido no escrevendo o applet
é um evento específico do panel e não inclui nenhum
evento tais como clicar botão, selecionar ítem, entrar com
texto, etc. Todos esses eventos serão tratados pelo método
action.
Primeiro, o action verifica se o evento foi gerado pelo botão.
Para isso, basta verificar se o evento.target é uma instância
de Button. isto é feito pelo (evento.target instanceof Button).
Caso for botão, podemos tomar decisão de acordo com o botão
clicado. Para saber qual dos botões foi precionado, converte o objeto
quem em String. note que quem é o objeto (botão) que foi
clicado. Quando converte para nome, será nome do botão que
é armazenado no variável label e é verificado se é
"azul" ou "vermelho". Em seguida, muda as cores do fundo. A classe Color
possui várias definições de cores usuais, assim como
permite criar cores a partir do modelo RGB ou HSI.
Agora, note que retorna false quando o evento não é do
botão ou não for botão específico. Quando o
método que cuida do evento retornar true, o AWT assume que o evento
foi devidamente tratado. quando o false é retornado, o método
de tratamento do evento (mouse, teclado ou action) da classe que adicionou
ele será chamado. Por exemplo, se o Applet fizer parte de algum
outro componente (alguma janela, por exemplo), se action do applet retornar
false, o action da janela é chamado. se o action do applet retornar
true, o método da janela não será chamado. isto fica
mais evidênte na medida que for acostumando com o interface através
de AWT e começar adicionar componentes um dentro do outro.
Rótulo:
Um rótulo é denominado de label. A utilidade dele é
apresentar textos dentro do panel ou frame.
A classe Label possui três construtores:
public Label()
public Label(String labeltext)
public label(String Labeltext,. int align);
O Label pode ser construido com ou sem o texto e alinhamento especificado.
Para alinhamento, existe três tipos definidos na classe label: RIGHT
(direita), LEFT (esquerda), CENTER (centrado). Não esqueça
que, para acessar o valor definido na classe, devemos colocar o nome da
classe antes do valor, tais como Labal.LEFT.
Possui dois métodos:
public void setText(String texto);
public String getText();
Estes métodos atribuem (ou modificam) e retornam respectivamente,
o valor a ser mostrado no Label.
import java.awt.*;
import java.applet.*;
public class Rotulo extends Applet {
Label texto = Label("Alo, pessoal!", Label.LEFT);
boolean original = true;
public void init(){
add(new Button("mudar o rotulo"));
}
public void boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) {
if(original)
texto.setText("Sou applet de rótulo");
else
texto.setText("Alo, pessoa1");
original = !original;
repaint();
return true;
}
else
return false; // evento não foi de botão. Próximo action é chamado.
}
}
Note que não verificamos o nome do botão. Isto pode ser feito,
porque tem apenas um botão e logo, se algum botão for clicado,
deve ser ele.
Caixa de checagem
Caixa de ticagem é uma espécie de label, com opção
de ligar/desliga. Ele apresenta um quadradinho seguido de label, e o usuário
pode ligar ou desligar esta opção. Ele é denominado
de CheckBox e possui três construtores:
public Checkboxl()
public Checkbox(String labeltext)
public Checkbox(String Labeltext, CheckboxGroup
g, boolean ini)
O terceiro construtor parece estranho, mas isto é devido ao
fato de Checkbox é usado também para criar botões
de rádio.
O primeiro e segundo construtor tem nada a esplicar. O terceiro construtor
é usado, quando deseja criar ChekBox já ligado ou desligao
pelo default. O segundo parâmetro CheckboxGroup, por enquanto, esquece.
Passe o new Checkboxgoup() no lugar dele que instanciará um novo
checkboxgroup.
existe o método denominado
public boolean getState()
que retorna true se o CheckBox estiver ativado e false caso contrário.
Cada vez que o usuário clicar sobre checkbox para ligar ou desligar,
o evento ocorre e action é chamado.
import java.awt.*;
import java.applet.*;
public class MyCheckBox extends Applet {
Checkbox Check1 = new CheckBox("gosto de java", new CheckboxGroup(), true),
, Check2 = new CheckBox("iniciante em java", new CheckboxGroup(), true);
public void init() {
add(Check1);
add(Check2);
}
public void boolean action(Event evento, Object quem) {
if(evento.target instanceof CheckBox) {
CheckBox checkboxAtual = (CheckBox)evento.target;
if(CheckboxAtual.getLabel() == "gosto de java") { // primeiro Checkbox
if(CheckboxAtual.getState()) { // ligado:
// O que vai fazer, se ligar
}
else {
// oque fazer, caso contrário.
}
return true;
}
else if(CheckboxAtual.getLabel() == "iniciante em java") {
if(CheckboxAtual.getState()) {
// o que fazer
}
else {
// o que fazer
}
return true;
}
return false;
}
}
No exemplo acima, armazenamos o evento.target no variável. Sempre
que faz uso repetido, esta técnica facilita o processo.
Normalmente, não implementamos o método action para tratar
de CheckBox, toda vez que clicar sobre ele. Programação correta
é incluir um botão de confirmação e checar
o estado dos CheckBox somente quando o botão for clicado. Portanto,
o exemplo acima serve apenas como exemplo para ilustrar o fato de que o
checkbox gera evento e é possível tratá-lo.
Verifique no exemplo abaixo, como tudo fica mais simples, se utilizar
um botão de confirmação (esta é a progrmação
usual de CheckBox).
import java.awt.*;
import java.applet.*;
public class MyCheckBox extends Applet {
Checkbox Check1 = new CheckBox("gosto de java", new CheckboxGroup(), true),
, Check2 = new Checkbox("iniciante em java", new CheckboxGroup(), true;
public void init() {
add(Check1);
add(Check2);
add(new Button("OK"));
}
public void boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) { // único botão é de confirmação
if(Check1.getState()) { // ligado: ele gosta de java
// O que vai fazer, se ligar
}
else { // desligado: não gosta de java
// oque fazer, caso contrário.
}
if(Check2.getState()) { // ligado: iniciante em java
// o que fazer
}
else { // desligado: não é iniciante em java
// o que fazer
}
return true;
}
return false;
}
}
Botão de Rádio.
Botão de rádio, denominado de Radio Button é um conjunto
de checkbox e é implementado, usando o CheckBox. Neste conjunto,
apenas um ítem estará ligado. É uma espécie
de seleção de opção. Ao clicar sobre um deles,
desativa automaticamente o outro. Para cliar o botão de rádio,
criamos um objeto do tipo CheckboxGroup e ir adicionando Checkbox nele,
usando o terceiro construtor do checkbox:
public Checkbox(String texto, CheckboxGroup g,
boolean ini)
a classe CheckboxGroup possui um me'todo
public Checkbox getCurrent()
que retorna o checkBox escolhido atualmente (ítem selecionado).
Não esqueça que, bom estilo de programação
para usar Checkbox ou Radio Button é criar um botão extra
de confirmação e checar o estado de Checkbox ou RadioButton
somente quando for clicado sobre botão de confirmação.
import java.awt.*;
import java.applet.*;
public class MyCheckBox extends Applet {
Label texto = new Label();
CheckboxGroup Escolha = new CheckboxGroup();
public void init() {
add(new CheckBox("Linguagem favorito é Java, Escolha, true));
add(new CheckBox("Linguagem favorito é C++, Escolha, false));
add(new CheckBox("Linguagem favorito é Pascal, Escolha, false));
add(new CheckBox("Linguagem favorito é Basic, Escolha, false));
add(new CheckBox("Linguagem favorito é Fortran, Escolha, false));
add(new Button("Confirma"));
add(new Button("Cancela"));
add(texto);
}
public boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) {
if((String)quem == "Confirma") {
CheckBox atual = Escolha.getCurrent();
texto.setText(atual.getLabel());
repaint();
return true;
}
}
return false;
}
}
Caixa de Escolha
A caixa de escolha é uma caixa que permite escolher ítens
entre vários. Ele exibe o ítem selecionado na caixa até
que altere a seleção. neste sentido, é semelhante
ao botào de rádio.
Ele possui como método básico
public suncronized void additem(String intem)
throws NullPointerException
public void select(String intem)
public String getSelecteditem()
que servem respectivamente para adicionar ítem, escolher a seleção
atual e obter o ítem selecionado atualmente.
Existem outros métodos associados a ele, mas os três métodos
acima já são suficientes para aplicação em
geral. caso deseja, consulte o livro sobre outros métodos.
Assim como CheckBox e Radio Buttom, Choice gera evento quando uma seleção
é realizado. Na aplicação em geral, cada vez que efetua
a escolha diferente, é efetuado a operação correspondênte,
mas podemos usar botão extra como no caso de Checkbox e Radio Buttom.
Veremos um exemplo de caixa de seleção para escolher
a cor do fundo do panel de applet:
import java.awt.*;
import java.applet.*;
public class MyChoice extends Applet {
Choice cor = new Choice();
public void init() {
cor.addItem("Vermelho");
cor.addItem("Azul");
cor.addItem("Verde");
cor.additem("Amarelo");
cor.addItem("Branco");
cor.select("Branco");
setBackground(Color.White);
add(cor);
}
public boolean action(Event evento, Object quem) {
if(evento.target instanceof Choice) {
if(cor.getSelecteditem() == "Vermelho")
setBackground(Color.Red);
else if(cor.getSelecteditem() == "Azul")
setBackground(Color.Blue);
else if(cor.getSelecteditem() == "Verde")
setBackground(Color.Green);
else if(cor.getSelecteditem() == "Amarelo")
setBackground(Color.yellow);
else if(cor.getSelecteditem() == "Branco")
setBackground(Color.White);
else
return false;
return true;
}
return false;
}
}
}
Lista (de rolagem)
A lista de rolagem é quase igual à caixa de seleção.
Ele exibe os ítens para ser selecionado, porém, pode conter
número grande de dados e pode rolar a lista atrvés da barra
de rolagem ao lado dele. Os ítens serão mostrados numa área
designada para ele. Na caixa de seleção, apenas um ítem
pode ser selecionado, no entanto, na lista, pode ser configurado para selecionar
apenas um ítem ou permitir multiplas seleções.
Construtores são:
public List()
public list(int linhas, boolean MultiplaEscolha);
No primeiro construtor, a list é da escolha
simplas. No segundo construtor, podemos indicar o número de ítens
que será exibido por vez e dizer, se a escolha é apenas um
ítem ou multipla escolha.
Para adicionar, ítens, usa-se o método:
public syncronized void addItem("String item);
Para saber os ítens selecionados, podemos usar os métodos:
public syncronized String getSelectedItem();
public syncronized String getSelectedItens();
Respectivamente para lista de escolha simples e escolha multipal.
Uma observação importante é que, não chama
o método action quando selecionamos elementos da lista. Portanto,
devemos sempre criar um botão de confirmação. Mas
caso queira manipular evento quando a seleção ocorre (por
exemplo, escolha de fonte no editor), podemos usar o método
public boolean handleEvent(Event event);
Veremos um exemplo simples:
import java.awt.*;
import java.applet.*;
public class MyList extends Applet {
List lista = new List("3, false);
public void init() {
lista.addItem("Vermelho");
lista.addItem("Azul");
lista.addItem("Verde");
lista.additem("Amarelo");
lista.addItem("Branco");
lista.select("Branco");
setBackground(Color.White);
add(new Label("Escolha as cores preferidas");
add(lista);
add(new Button("OK");
}
public boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) {
if((String)quem == "OK")) { // confirmado
String cor = lista.getSelecteditens();
if(cor == "Vermelho")
setBackground(Color.Red);
else if(cor == "Azul")
setBackground(Color.Blue);
else if(cor == "Verde")
setBackground(Color.Green);
else if(cor == "Amarelo")
setBackground(Color.yellow);
else if(cor == "Branco")
setBackground(Color.White);
return true;
}
return false;
}
}
}
A lista possui vários métodos para manipulação
bem controlado, porém, não trataremos aqui. O interessado
em usar a lista, deve procurar no livro ou manual para ter menor desperdício
e maior controle na utilização de listas.
Campo de Textos e Área de Textos
O campo de texto denominado de TextField é uma área retangular
onde possa escrever ou digitar uma linha de texto e é fundamental
para criar entrada/saida de dados no AWT.
Textfield possui quatro construtores:
public Textfield();
public TextField(int numcols);
public TextField(String texto);
public TextField(String texto, int numcols);
onde numcols é o número de colunas e texto é o
texto default.
A área de texto é análogo ao campo de texto, porém,
é uma região retangular na qual permite editar texto em várias
linhas. O seus construtores são:
public TextArea();
public Textarea(int numcols, numrows);
public Textarea(String texto);
public TextArea(String texto, int numcols, numrows);
onde texto é o texto default, numcols, e numrows são
número de linhas e colunas da área de texto.
Essencialmente, a diferênça entre Textfield e TextArea
, é a área de edição. Seus métodos são
similares:
Para associar um texto para ser editado, usa-se o método
public setText(String texto);
e o método
public String getText();
retorna o texto editado.
O campo de texto ou área de texto pode ser editábel (entrada)
ou não editável (saída). Para configurar a editabilidade,
usa-se o método
public void setEditable(boolean editavel);
Se estiver usando apenas para exibir dados, basta chamar setEditable
com parâmetro false. A configuração padrão de
editabilidade é true.
Como no caso de lista, TextField e TextArea dispõe de uma variedade
de métodos para melhor comtrole. O interessado deve consultar o
manual. Também, como na lista, o método action não
é chamado. Seu evento pode ser manuseado pelo método handleEvent,
ou pelo botão ou menu de confirmação. Na prática,
quando deseja implementar um editor, implementamos o evento de mouse diretamente
para TextArea, em vez de implementar o handleEvent().
A seguir, um exemplo simples que usa o Textfield para entrada/saída
de dados:
import java.awt.*;
import java.applet.*;
public class TextField extends Applet {
String texto;
TextField entrada(40), saida(40);
public void init() {
saida.setEditable(false);
add(new Label("Entrada")); add(entrada);
add(new Label("Saida")); add(saida);
add(new Button("Confirma));
}
public boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) {
if((String)quem == "Confirma")) { // confirmado
texto = entrada.getText();
saida.setText(texto);
repaint(); // não esquecer
return true;
}
}
return false;
}
}
}
Note que, a entrada de sados no AWT é feito através de TextField
e TextArea, ambos como sendo String. Quando deseja entrar ou sair om dados
numéricos, devemos converter. portanto, devemos saber a conversão
básica:
(new Integer(n)).toString()
converte o inteiro n para String
(new Double(x)).toString()
converte o double x para String
(new Integer(s)).intValue()
converte o String s para inteiro
Integer. parseInt(s)
converte o String s para inteiro
(new Double(s)).doubleValue()
converte o String s para double
Double.parseDouble(s)
converte o String s para double
Scroll Bar e Canvas
O uso de Scroll Bar (barra de rolamento) requer um pouco de maturidade
no AWT e não será tratado aqui. Canvas, não será
necessário para iniciante em AWT e também não será
tratado.
Frames
Frame é uma janela e nele, podemos adicionar panel (dentro do panel,
podemos adicionar qualquer componentes).
A utilidade maior de um frame é criar applet que possa ser executado
fora da página HTML (aplicativo) e criar janelas de comunicação.
Seu construtor pode ou não receber o título da janela.
public Frame();
public Frame(String titulo);
O Frame possui diversos métodos, mas veremos apenas o essencial.
O interessado deve consultar o manual.
public voidd show();
public void hide();
Um Frame não será mostrado quando
é criado, pois pode demorar para criar, acrescentando componentes
nele. Para que a janela seja visível 9e funcione), devemos chamar
o método show(). Uma vez que terminou de utilizar a janela, devemos
chamar o método hide() para desativar. Note que, o método
hide apenas esconde a janela até que outro show() seja chamado.
Alguns métodos úteis são:
public void pack();
public setResizable(boolean redimensionavel);
onde pack() é o método que ajusta
o tamanho da janela para tamanho mínimo necessário e setResizable()
configura a janela para janela de tamanho ajustável ou não.
Quando o parâmetro é true, é de tamanho ajustável
e quando é false, é de tamanho fixo.
Quando não vai usar mais o frame, devemos chamar o método
public void dispose();
para liberar o recurso que está sendo usado pelo frame. O método
hide() esconde o frame, mas não libera os recursos usados.
Para criar applet que possa ser executado fora
da página HTML, implementamos o método main() e através
dele, criamos um Frame, adiciona a classe principal da applet e executar
o init, e em seguida, executa-se o método show() do Frame. Por exemplo,
se o applet chamar MeuApplet, o método main() associado nele será
mais ou menos o seguinte:
import java.awt.*;
import java.applet.*;
public class Botao extends Applet {
public void init(){
add(new Button("Azul"));
add(new Button("Vermelho"));
}
public void boolean action(Event evento, Object quem) {
if(evento.target instanceof Button) {
String label = (String)quem;
if(label == "Azul")
setBackground(Color.blue);
else if (label == "Vermelho")
setBackground(Color.red));
else
return false;
repaint();
return true; // não chama mais nenhum action seguinte
}
else
return false; // evento não foi de botão. Próximo action é chamado.
}
public void main(String args[]) {
Frame janela = new Frame("Applet de Botão");
Applet principal = new Botao();
principal.init();
principal.start();
janela.setLayort(new FlowLayort());
janela.add(principal);
janela.pack(); janela.show();
}
}
como exemplo:
public void main(String args[]) {
// cria a janela
Frame janela = new Frame("Meu Applet");
// cria o applet
Applet principal = new MeuApplet();
// inicializa o applet através de init() e start(): nessa ordem.
principal.init();
principal.start();
// configura o Layort para Flowlayort.
// um Frame deve ter Layout, obrigatoriamente.
janela.setLayort(new FlowLayort());
// Adiciona o applet na janela
janela.add(principal);
janela.pack(); // tamanho mínimo necessário
janela.show(); // ativa a janela
}
Menu
Menu possui dois construtores
public Menu()
public Menu(String titulo)
onde o segundo construtor atribui nome para menu. Os ítens do
menu denominado de MenuÍten pode ser adicionado (se for menu com
vários ítens).
MunuIten possui dosi construtores:
Os ítens do Menu é construido pelos construtores
[anterior,
índice,
seguinte]