Aula3

Propaganda
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
6. Como aplicações gráficas funcionam em Java ?
Todas as aplicações gráficas em Java usam instâncias de classes existentes, que por serem
parte da linguagem podem ser executadas em todas as versões de Java e em todos os
sistemas operacionais. Destas classes, a principal é a classe Frame, que cria uma janela com
borda e barra de título para criação de aplicações.
Podemos usar instâncias da classe Frame de duas maneiras: usando-as diretamente no
programa (possivelmente dentro do método main) ou criando uma classe derivada da classe
Frame e criando instâncias desta classe derivada dentro do programa. Eventualmente alguns
métodos da classe Frame devem ser reescritos para fazer o que queremos, significando que
devemos usar instâncias de classes que estendem ou herdam a classe Frame. A classe
derivada herdará todos os mecanismos da classe Frame, mas alguns métodos deverão ser
reescritos para nossas necessidades. Um exemplo bem básico é mostrado abaixo:
Exemplo 1. Um programa que cria uma instância de uma classe que herda da classe
Frame
1 /* Para podermos usar qualquer operação gráfica 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 título) // um construtor que recebe uma String como argumento
8
{
9
// chamo o construtor da classe Frame com o argumento título
10
super(título);
11 // Declaro o tamanho que instâncias desta classe vão ocupar
12
setSize(100,100);
13 // Digo que instâncias desta classe serão visíveis
14 show();
15 } // fim do construtor para a classe minhaFrame
16 } // fim da classe minhaFrame
17
18 // uma classe que declara e usa uma instância da classe minhaFrame
19 class demoFrame
20 {
21 public static void main(String args[])
22
{
23 // Declaro uma nova instância da classe minhaFrame
24 minhaFrame mf = new minhaFrame("Uma Janela !");
25
} // fim do método main
26 } // fim da classe
22/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
1
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
6.1. Adicionando componentes na Frame
Somente a janela de uma instância de classes descendentes de Frame não adiciona utilidade
real aos programas - é necessária a inserção de componentes na janela que terão diversas
utilidades. Botões, áreas de texto, áreas para desenho, etc. são componentes que podem ser
adicionados à instâncias de classes descendentes de Frame que podem aumentar a utilidade
dos programas.
Para adicionar um componente à Frame, devemos usar o método add(Component c), onde c
é uma instância 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 contém uma classe herdeira de Component e
uma classe herdeira de Frame. Para ilustrar conceitos da próxima seção, iremos criar uma
classe que herda da classe Canvas (que por sua vez herda da classe Component).
Exemplo 2. Um programa com instâncias de classes descendentes de Frame e Canvas
1 /* Para podermos usar qualquer operação gráfica 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 título) // um construtor que recebe uma String como argumento
13
{
14
// chamo o construtor da classe Frame com o argumento título
15
super(título);
16 // Declaro e inicializo a instância da classe meuCanvas
17 meuCanvas cv = new meuCanvas();
18 // adiciono a instância à classe Frame
19 add(cv);
20 // Declaro o tamanho que instâncias desta classe vão ocupar
21
setSize(400,100);
22 // Digo que instâncias desta classe serão visíveis
23 show();
24 } // fim do construtor para a classe minhaFrame
25 } // fim da classe minhaFrame
26
27 // uma classe que declara e usa uma instância da classe minhaFrame
22/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
2
28
29
30
31
32
33
34
35
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
class demoFrame
{
public static void main(String args[])
{
// Declaro uma nova instância da classe minhaFrame
minhaFrame mf = new minhaFrame("Uma Janela com Canvas !");
} // fim do método main
} // fim da classe
6.2. Criando alguns botões em aplicações gráficas em Java
Botões servem para permitir ao usuário executar uma ação (geralmente uma parte de um
programa em Java). Um botão pode ser criado em um aplicativo com interface gráfica em
Java usando instâncias da classe Button . Um exemplo de programa simples que cria um
botão na instância da classe Frame é mostrado abaixo:
Exemplo 3. Um programa em Java com um botão
1 /* Para podermos usar qualquer operação gráfica 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 instância da classe Button seja visível de todos os métodos da
8
classe minhaFrame, nós a declaramos aqui fora dos métodos */
9 Button b;
10 minhaFrame(String título) // um construtor que recebe uma String como argumento
11
{
12
// chamo o construtor da classe Frame com o argumento título
13
super(título);
14
// adiciono um botão
15 b = new Button("Botão 1");
16 add(b);
17 // Declaro o tamanho que instâncias desta classe vão ocupar
18
setSize(200,100);
19 // Digo que instâncias desta classe serão visíveis
20 show();
21 } // fim do construtor para a classe minhaFrame
22 } // fim da classe minhaFrame
23
24 // uma classe que declara e usa uma instância 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: [email protected]
3
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
29 // Declaro uma nova instância da classe minhaFrame
30 minhaFrame mf = new minhaFrame("Janela com botão !");
31
} // fim do método main
32 } // fim da classe
Alguns métodos interessantes da classe Button são:
•getLabel(): retorna uma String com o título do botão
•setLabel(String nome): usa a String "nome" como o novo título do botão
•setBackground(Color cor): Muda a cor de fundo do botão para a especificada por cor.
•setEnabled(boolean enable): se "enable" for true, permite que o botão aceite eventos
(cliques). Se for false, desabilita temporariamente o botão (cliques não terão efeito).
É possível mudarmos fontes e cores dos Buttons usando os mesmos métodos 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 botões
Podemos observar que o botão no programa acima funciona (isto é, muda sua aparência
quando pressionado) mas fora este efeito visual, nada ocorre. Isto se deve ao fato de não
havermos registrado nenhum evento que devesse ocorrer quando o botão for pressionado,
ou seja, não explicitamos no programa que ação deve ocorrer caso o botão seja pressionado.
O registro de eventos em Java é feito em dois passos: primeiro, nós registramos o evento
para cada componente da interface que pode disparar um evento (no nosso caso, as
instâncias da classe Button). O registro é feito com o método addActionListener do próprio
componente, e devemos passar para este método um único argumento, que mostra qual é a
classe que vai processar o evento. Na maioria dos casos, a própria classe onde o Button é
inserido processará o evento ocorrido.
O segundo passo para registrar um evento é fazer com que a classe onde o botão está sendo
criado implemente a classe ActionListener .Devemos também criar um método 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 botão (que funciona !)
1
2
3
4
/* Para podermos usar qualquer operação gráfica devemos incluir a linha abaixo */
import java.awt.*;
/* Para podermos processar qualquer tipo de evento, devemos incluir a linha abaixo */
import java.awt.event.*;
22/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
4
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
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 instância da classe Button seja visível de todos os métodos da
10
classe minhaFrame, nós a declaramos aqui fora dos métodos */
11 Button b;
12 minhaFrame(String título) // um construtor que recebe uma String como argumento
13
{
14
// chamo o construtor da classe Frame com o argumento título
15
super(título);
16
// adiciono um botão
17 b = new Button("Botão 1");
18 add(b);
19 // adiciono um "listener" de evento ao botão
20 b.addActionListener(this);
21 // Declaro o tamanho que instâncias desta classe vão ocupar
22
setSize(200,100);
23 // Digo que instâncias desta classe serão visíveis
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 método, como public void */
29 public void actionPerformed(ActionEvent evt)
30
{
31 System.out.println("O botão foi pressionado !");
32
}
33
34 } // fim da classe minhaFrame
35
36 // uma classe que declara e usa uma instância da classe minhaFrame
37 class demoButton
38 {
39 public static void main(String args[])
40
{
41 // Declaro uma nova instância da classe minhaFrame
42 minhaFrame mf = new minhaFrame("Janela com botão !");
43
} // fim do método main
44 } // fim da classe
Veja também a apostila 263_curso_java.zip - pág 47 - 65
22/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
5
Projeto V (U900005) – Ciências da Computação
Projeto II (U900003) – Engenharia da Computação
Prof. Valdir Gil Pillat
Exercícios da aula 3
1. De onde vieram os métodos setSize e show da classe minhaFrame no exemplo 1?
Teórico
2. O que aconteceria se tirássemos a linha 10 no exemplo 1? E as linhas 12 ou 14 ? Teórico
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. Fácil
4. Modifique o exemplo 1 para que instâncias da classe minhaFrame não possam ter seu
tamanho modificado. Fácil
5. Crie uma instância de classe descendente de Frame onde o fundo da janela seja azul.
Fácil
6. O que acontecerá se especificarmos um nome de fonte inexistente (por exemplo,
"Inexistente") no construtor da classe Font ? Fácil
7. Crie um programa onde o fundo seja preto e um texto em caracteres brancos seja escrito.
Fácil
8. Escreva um programa que desenhe o símbolo das olimpíadas na tela. Fácil
9. Considere o exemplo 1. Escreva um programa em Java que crie 5 instâncias da classe
minhaFrame, com os nomes "um", "dois", "três", "quatro" e "cinco", e tamanhos 100x100,
200x100, 100x200, 200x200, 300x100 respectivamente. O construtor da classe
minhaFrame deverá ser modificado. Intermediário
10. Crie uma aplicação em Java com um botão que, ao ser clicado, mude o tamanho da
janela do programa de 100x100 para 200x200. Fácil
11. Crie uma aplicação em Java com um botão que, ao ser clicado, imprima na saída
normal (console de texto) um valor aleatório entre 1 e 6. Fácil
12. Crie uma aplicação em Java com um botão que, ao ser clicado, mude a cor do fundo da
janela para vermelho. Fácil
13. Crie uma aplicação em Java com um botão 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. Intermediário
14. Crie uma aplicação em Java com um botão que, ao ser clicado, mude a cor do fundo de
cada um dos dois botões para uma cor aleatória qualquer. Intermediário
15. Crie uma aplicação em Java com um botão que ao ser clicado imprima na saída normal
(console de texto) o código fonte do programa. Intermediário
16. Crie uma aplicação em Java com dois botões de forma que quando um for pressionado,
ele se desabilita (com o comando setEnabled) e habilita o outro botão. Exemplo: quando o
botão um for pressionado, ele se desabilitará e habilitará o botão dois. Quando o botão dois
for clicado, ele se se desabilitará e habilitará o botão um. Intermediário
22/08/2005
http://www.fcc.univap.br/~valdir
e-mail: [email protected]
6
Download