Vous êtes sur la page 1sur 6

Projeto V (U900005) Cincias da Computao Projeto II (U900003) Engenharia da Computao Prof. Valdir Gil Pillat 6.

6. Como aplicaes grficas funcionam em Java ? Todas as aplicaes grficas em Java usam instncias de classes existentes, que por serem parte da linguagem podem ser executadas em todas as verses de Java e em todos os sistemas operacionais. Destas classes, a principal a classe Frame, que cria uma janela com borda e barra de ttulo para criao de aplicaes. Podemos usar instncias da classe Frame de duas maneiras: usando-as diretamente no programa (possivelmente dentro do mtodo main) ou criando uma classe derivada da classe Frame e criando instncias desta classe derivada dentro do programa. Eventualmente alguns mtodos da classe Frame devem ser reescritos para fazer o que queremos, significando que devemos usar instncias de classes que estendem ou herdam a classe Frame. A classe derivada herdar todos os mecanismos da classe Frame, mas alguns mtodos devero ser reescritos para nossas necessidades. Um exemplo bem bsico mostrado abaixo: Exemplo 1. Um programa que cria uma instncia de uma classe que herda da classe Frame 1 /* Para podermos usar qualquer operao grfica devemos incluir a linha abaixo */ 2 import java.awt.*; 3 4 /* Criamos uma classe que herda tudo da classe Frame */ 5 class minhaFrame extends Frame 6 { 7 minhaFrame(String ttulo) // um construtor que recebe uma String como argumento 8 { 9 // chamo o construtor da classe Frame com o argumento ttulo 10 super(ttulo); 11 // Declaro o tamanho que instncias desta classe vo ocupar 12 setSize(100,100); 13 // Digo que instncias desta classe sero visveis 14 show(); 15 } // fim do construtor para a classe minhaFrame 16 } // fim da classe minhaFrame 17 18 // uma classe que declara e usa uma instncia da classe minhaFrame 19 class demoFrame 20 { 21 public static void main(String args[]) 22 { 23 // Declaro uma nova instncia da classe minhaFrame 24 minhaFrame mf = new minhaFrame("Uma Janela !"); 25 } // fim do mtodo main 26 } // fim da classe

22/08/2005

http://www.fcc.univap.br/~valdir e-mail: valdirgp@univap.br

Projeto V (U900005) Cincias da Computao Projeto II (U900003) Engenharia da Computao Prof. Valdir Gil Pillat 6.1. Adicionando componentes na Frame Somente a janela de uma instncia de classes descendentes de Frame no adiciona utilidade real aos programas - necessria a insero de componentes na janela que tero diversas utilidades. Botes, reas de texto, reas para desenho, etc. so componentes que podem ser adicionados instncias de classes descendentes de Frame que podem aumentar a utilidade dos programas. Para adicionar um componente Frame, devemos usar o mtodo add(Component c), onde c uma instncia de uma classe descendente da classe Component. Da mesma maneira que devemos criar classes herdeiras da classe Frame, podemos criar descendentes customizados da classe Component. A listagem abaixo mostra um programa que contm uma classe herdeira de Component e uma classe herdeira de Frame. Para ilustrar conceitos da prxima seo, iremos criar uma classe que herda da classe Canvas (que por sua vez herda da classe Component). Exemplo 2. Um programa com instncias de classes descendentes de Frame e Canvas 1 /* Para podermos usar qualquer operao grfica devemos incluir a linha abaixo */ 2 import java.awt.*; 3 4 /* Criamos uma classe que herda tudo da classe Canvas */ 5 class meuCanvas extends Canvas // por enquanto, vazia 6 { 7 } 8 9 /* Criamos uma classe que herda tudo da classe Frame */ 10 class minhaFrame extends Frame 11 { 12 minhaFrame(String ttulo) // um construtor que recebe uma String como argumento 13 { 14 // chamo o construtor da classe Frame com o argumento ttulo 15 super(ttulo); 16 // Declaro e inicializo a instncia da classe meuCanvas 17 meuCanvas cv = new meuCanvas(); 18 // adiciono a instncia classe Frame 19 add(cv); 20 // Declaro o tamanho que instncias desta classe vo ocupar 21 setSize(400,100); 22 // Digo que instncias desta classe sero visveis 23 show(); 24 } // fim do construtor para a classe minhaFrame 25 } // fim da classe minhaFrame 26 27 // uma classe que declara e usa uma instncia da classe minhaFrame 22/08/2005 http://www.fcc.univap.br/~valdir e-mail: valdirgp@univap.br

28 29 30 31 32 33 34 35

Projeto V (U900005) Cincias da Computao Projeto II (U900003) Engenharia da Computao Prof. Valdir Gil Pillat class demoFrame { public static void main(String args[]) { // Declaro uma nova instncia da classe minhaFrame minhaFrame mf = new minhaFrame("Uma Janela com Canvas !"); } // fim do mtodo main } // fim da classe

6.2. Criando alguns botes em aplicaes grficas em Java Botes servem para permitir ao usurio executar uma ao (geralmente uma parte de um programa em Java). Um boto pode ser criado em um aplicativo com interface grfica em Java usando instncias da classe Button . Um exemplo de programa simples que cria um boto na instncia da classe Frame mostrado abaixo: Exemplo 3. Um programa em Java com um boto 1 /* Para podermos usar qualquer operao grfica devemos incluir a linha abaixo */ 2 import java.awt.*; 3 4 /* Criamos uma classe que herda tudo da classe Frame */ 5 class minhaFrame extends Frame 6 { 7 /* Para que a instncia da classe Button seja visvel de todos os mtodos da 8 classe minhaFrame, ns a declaramos aqui fora dos mtodos */ 9 Button b; 10 minhaFrame(String ttulo) // um construtor que recebe uma String como argumento 11 { 12 // chamo o construtor da classe Frame com o argumento ttulo 13 super(ttulo); 14 // adiciono um boto 15 b = new Button("Boto 1"); 16 add(b); 17 // Declaro o tamanho que instncias desta classe vo ocupar 18 setSize(200,100); 19 // Digo que instncias desta classe sero visveis 20 show(); 21 } // fim do construtor para a classe minhaFrame 22 } // fim da classe minhaFrame 23 24 // uma classe que declara e usa uma instncia da classe minhaFrame 25 class demoButton 26 { 27 public static void main(String args[]) 28 { 22/08/2005 http://www.fcc.univap.br/~valdir e-mail: valdirgp@univap.br 3

Projeto V (U900005) Cincias da Computao Projeto II (U900003) Engenharia da Computao Prof. Valdir Gil Pillat 29 // Declaro uma nova instncia da classe minhaFrame 30 minhaFrame mf = new minhaFrame("Janela com boto !"); 31 } // fim do mtodo main 32 } // fim da classe Alguns mtodos interessantes da classe Button so: getLabel(): retorna uma String com o ttulo do boto setLabel(String nome): usa a String "nome" como o novo ttulo do boto setBackground(Color cor): Muda a cor de fundo do boto para a especificada por cor. setEnabled(boolean enable): se "enable" for true, permite que o boto aceite eventos (cliques). Se for false, desabilita temporariamente o boto (cliques no tero efeito). possvel mudarmos fontes e cores dos Buttons usando os mesmos mtodos da classe Component: setForeground(Color cor): Muda a cor de frente (de texto) para a cor especificada por cor. setBackground(Color cor): Muda a cor de fundo para a cor especificada por cor. setFont(Font f): Muda a fonte dos caracteres para a fonte especificada por f. 6.3. Processando Eventos provenientes dos botes Podemos observar que o boto no programa acima funciona (isto , muda sua aparncia quando pressionado) mas fora este efeito visual, nada ocorre. Isto se deve ao fato de no havermos registrado nenhum evento que devesse ocorrer quando o boto for pressionado, ou seja, no explicitamos no programa que ao deve ocorrer caso o boto seja pressionado. O registro de eventos em Java feito em dois passos: primeiro, ns registramos o evento para cada componente da interface que pode disparar um evento (no nosso caso, as instncias da classe Button). O registro feito com o mtodo addActionListener do prprio componente, e devemos passar para este mtodo um nico argumento, que mostra qual a classe que vai processar o evento. Na maioria dos casos, a prpria classe onde o Button inserido processar o evento ocorrido. O segundo passo para registrar um evento fazer com que a classe onde o boto est sendo criado implemente a classe ActionListener .Devemos tambm criar um mtodo public void actionPerformed(ActionEvent evt) que processar todos os eventos registrados naquela classe. O programa abaixo mostra como isto pode ser feito: Exemplo 4. Um programa em Java com um boto (que funciona !) 1 2 3 4 /* Para podermos usar qualquer operao grfica devemos incluir a linha abaixo */ import java.awt.*; /* Para podermos processar qualquer tipo de evento, devemos incluir a linha abaixo */ import java.awt.event.*; http://www.fcc.univap.br/~valdir e-mail: valdirgp@univap.br 4

22/08/2005

Projeto V (U900005) Cincias da Computao Projeto II (U900003) Engenharia da Computao Prof. Valdir Gil Pillat 5 6 /* Criamos uma classe que herda tudo da classe Frame */ 7 class minhaFrame extends Frame implements ActionListener 8 { 9 /* Para que a instncia da classe Button seja visvel de todos os mtodos da 10 classe minhaFrame, ns a declaramos aqui fora dos mtodos */ 11 Button b; 12 minhaFrame(String ttulo) // um construtor que recebe uma String como argumento 13 { 14 // chamo o construtor da classe Frame com o argumento ttulo 15 super(ttulo); 16 // adiciono um boto 17 b = new Button("Boto 1"); 18 add(b); 19 // adiciono um "listener" de evento ao boto 20 b.addActionListener(this); 21 // Declaro o tamanho que instncias desta classe vo ocupar 22 setSize(200,100); 23 // Digo que instncias desta classe sero visveis 24 show(); 25 } // fim do construtor para a classe minhaFrame 26 27 /* J que a classe minhaFrame implementa ActionListener, sou obrigado a 28 criar este mtodo, como public void */ 29 public void actionPerformed(ActionEvent evt) 30 { 31 System.out.println("O boto foi pressionado !"); 32 } 33 34 } // fim da classe minhaFrame 35 36 // uma classe que declara e usa uma instncia da classe minhaFrame 37 class demoButton 38 { 39 public static void main(String args[]) 40 { 41 // Declaro uma nova instncia da classe minhaFrame 42 minhaFrame mf = new minhaFrame("Janela com boto !"); 43 } // fim do mtodo main 44 } // fim da classe Veja tambm a apostila 263_curso_java.zip - pg 47 - 65

22/08/2005

http://www.fcc.univap.br/~valdir e-mail: valdirgp@univap.br

Projeto V (U900005) Cincias da Computao Projeto II (U900003) Engenharia da Computao Prof. Valdir Gil Pillat Exerccios da aula 3 1. De onde vieram os mtodos setSize e show da classe minhaFrame no exemplo 1? Terico 2. O que aconteceria se tirssemos a linha 10 no exemplo 1? E as linhas 12 ou 14 ? Terico 3. Modifique o exemplo 1 para que o nome da janela (que aparece na barra superior da janela) seja lido do teclado e passado pelo construtor da classe minhaFrame. Fcil 4. Modifique o exemplo 1 para que instncias da classe minhaFrame no possam ter seu tamanho modificado. Fcil 5. Crie uma instncia de classe descendente de Frame onde o fundo da janela seja azul. Fcil 6. O que acontecer se especificarmos um nome de fonte inexistente (por exemplo, "Inexistente") no construtor da classe Font ? Fcil 7. Crie um programa onde o fundo seja preto e um texto em caracteres brancos seja escrito. Fcil 8. Escreva um programa que desenhe o smbolo das olimpadas na tela. Fcil 9. Considere o exemplo 1. Escreva um programa em Java que crie 5 instncias da classe minhaFrame, com os nomes "um", "dois", "trs", "quatro" e "cinco", e tamanhos 100x100, 200x100, 100x200, 200x200, 300x100 respectivamente. O construtor da classe minhaFrame dever ser modificado. Intermedirio 10. Crie uma aplicao em Java com um boto que, ao ser clicado, mude o tamanho da janela do programa de 100x100 para 200x200. Fcil 11. Crie uma aplicao em Java com um boto que, ao ser clicado, imprima na sada normal (console de texto) um valor aleatrio entre 1 e 6. Fcil 12. Crie uma aplicao em Java com um boto que, ao ser clicado, mude a cor do fundo da janela para vermelho. Fcil 13. Crie uma aplicao em Java com um boto que, ao ser clicado, mude o tamanho da janela do programa de 100x100 para 200x200, e ao ser clicado de novo, mude o tamanho da janela do programa de volta para 100x100. Intermedirio 14. Crie uma aplicao em Java com um boto que, ao ser clicado, mude a cor do fundo de cada um dos dois botes para uma cor aleatria qualquer. Intermedirio 15. Crie uma aplicao em Java com um boto que ao ser clicado imprima na sada normal (console de texto) o cdigo fonte do programa. Intermedirio 16. Crie uma aplicao em Java com dois botes de forma que quando um for pressionado, ele se desabilita (com o comando setEnabled) e habilita o outro boto. Exemplo: quando o boto um for pressionado, ele se desabilitar e habilitar o boto dois. Quando o boto dois for clicado, ele se se desabilitar e habilitar o boto um. Intermedirio

22/08/2005

http://www.fcc.univap.br/~valdir e-mail: valdirgp@univap.br