A maior rede de estudos do Brasil

Grátis
118 pág.
poojava

Pré-visualização | Página 16 de 37

Java (lightweight components), com funcionali-
dades e aparência independentes do sistema onde a aplicação é executada.
4.1 Apresentação gráfica
A base para tudo que é desenhado na tela de uma aplicação gráfica é o contexto gráfico, em Java
um objeto da classe Graphics do pacote java.awt. São nesses objetos que linhas, retângulos,
círculos, strings, etc. são desenhados, compondo a apresentação visual da aplicação gráfica.
Todo componente gráfico tem associado a si um contexto gráfico e alguns métodos chaves para
manipulá-lo. A um objeto da classe Component pode-se aplicar os métodos getGraphics(),
que permite obter uma referência para um objeto da classe Graphics; paint(Graphics), que
determina o que é feito no contexto gráfico; e repaint(), que solicita uma atualização no contexto
gráfico.
Para determinar o conteúdo gráfico do contexto, os métodos da classe Graphics são utilizados.
Esses métodos incluem facilidades para definição de cores, fontes e definição de figuras geométricas.
O sistema de coordenadas para definir a posição do desenho no contexto tem origem no canto superior
esquerdo da área gráfica, tomando valores inteiros para 5 e 6 representando quantidades de pixels na
horizontal e na vertical, respectivamente.
A cor corrente para o contexto gráfico pode ser obtida e definida pelos métodos getColor()
e setColor(), respectivamente. Esses métodos usam cores representadas por objetos da classe
46
Programação orientada a objetos com Java 4.2. Interfaces gráficas com usuários
Color, que oferece constantes para usar cores pré-definidas, métodos para definir cores especifican-
do níveis RGB (red, green, blue) ou HSB (hue, saturation, brightness) e métodos para manipular as
cores existentes.
Similarmente, a fonte usada para a apresentação de strings no contexto pode ser obtida e definida
através de métodos getFont() e setFont(). Fontes são representadas por objetos da classe
Font.
Entre os diversos métodos usados para desenhar no contexto, há métodos para desenhar texto
usando a fonte de texto e a cor corrente, drawString(); desenhar linhas retas, drawLine(); e
desenhar diversas formas geométricas, tais como arcos, drawArc(); retângulos, drawRect(),
drawRoundRect(), draw3DRect(); polígonos, drawPolygon(); ovais, drawOval();
e suas correspondentes versões preenchidas, fillArc(), fillRect(), fillRoundRect(),
fill3DRect(), fillPolygon() e fillOval().
4.2 Interfaces gráficas com usuários
Criar uma interface gráfica com usuários em Java envolve tipicamente a criação de um container,
um componente que pode receber outros. Em uma aplicação gráfica autônoma, tipicamente o con-
tainer usado como base é um frame (uma janela com bordas e barra de título), enquanto que em um
applet o container base é um panel (uma área gráfica inserida em outra). Em aplicações complexas,
qualquer tipo de combinação desses e de outros tipos de componentes é utilizado.
Após sua criação, os containers da aplicação recebem componentes de interface com usuários,
que permitirão apresentar e receber dados aos e dos usuários. Embora seja possível posicionar esses
componentes através de coordenadas absolutas em cada container, é recomendável que o projetista
utilize sempre um gerenciador de layout para realizar essa tarefa. Deste modo, garante-se que a apli-
cação possa ser executada independentemente das características da plataforma onde será executada.
Finalmente, é preciso especificar quais devem ser os efeitos das ações dos usuários — tais como
um "clique"do mouse ou uma entrada de texto — quando realizadas sobre cada um desses compo-
nentes. Isto se dá através da especificação de classes manipuladoras de eventos, projetadas para a
aplicação. Ao associar objetos dessas classes aos componentes gráficos, o projetista determina o
comportamento da aplicação.
4.2.1 Eventos da interface gráfica
No modelo de eventos suportado a partir da versão 1.1 de Java, um componente gráfico qual-
quer pode reconhecer alguma ação do usuário e a partir dela disparar um evento — indicando, por
exemplo, que o botão do mouse foi pressionado ou que um texto foi modificado — que será captu-
rado por um objeto registrado especificamente para registrar aquele tipo de evento ocorrido naquele
componente.
O pacote java.awt.event define as diversas classes de eventos que podem ocorrer através
das interfaces gráficas. Eventos gráficos são objetos derivados da classe AWTEvent, que por sua
vez são derivados de objetos de evento genéricos definidos pela classe EventObject. Desta, even-
tos gráficos herdam o método getSource(), que permite identificar o objeto que deu origem ao
evento.
c
�
2001 FEEC/UNICAMP 47
Programação orientada a objetos com Java 4.2. Interfaces gráficas com usuários
Eventos gráficos genéricos são especializados de acordo com o tipo de evento sob consideração
— por exemplo, pressionar um botão do mouse gera um objeto da classe MouseEvent. A mesma
ação sobre um botão, no entanto, gera também um ActionEvent, enquanto que sobre o botão de
minimizar na barra de título de um frame um WindowEvent seria ao invés adicionalmente gerado.
Outros eventos de interesse definidos em java.awt.event incluem ItemEvent, indican-
do que um item de uma lista de opções foi selecionado; TextEvent, quando o conteúdo de um
componente de texto foi modificado; e KeyEvent, quando alguma tecla foi pressionada no teclado.
A resposta que uma aplicação dá a qualquer evento que ocorre em algum componente gráfico é
determinada por métodos específicos, registrados para responder a cada evento. O nome e a assina-
tura de cada um desses métodos é determinado por uma interface Java do tipo listener. Assim, para
responder a um ActionEvent será utilizado o método definido na interface ActionListener;
para responder a um WindowEvent, os métodos de WindowListener. Similarmente, há interfa-
ces ItemListener, TextListener e KeyListener. Os eventos do mouse são manipulados
através de métodos especificados em duas interfaces, MouseListener (para ações sobre o mouse)
e MouseMotionListener (para tratar movimentos realizados com o mouse).
Apesar de existir um grande número de eventos e possibilidades de resposta que a aplicação
poderia dar a cada um deles, cada aplicação pode especificar apenas aqueles para os quais há interesse
que sejam tratados. Para os eventos que o projetista da aplicação tem interesse de oferecer uma
reação, ele deve definir classes manipuladoras de eventos (handlers), implementações de cada listener
correspondente ao tipo de evento de interesse.
Para interfaces listener que especificam diversos métodos, classes adaptadoras são definidas.
Essas classes adaptadoras são classes abstratas definidas no pacote de eventos AWT, com nome XX-
XAdapter, onde XXX seria o prefixo correspondente ao tipo de evento de interesse. Assim, para
que a aplicação use uma classe adaptadora para tratar os eventos do tipo WindowEvent, por exem-
plo, uma classe que estende a classe WindowAdapter pode ser definida. Nessa classe derivada, os
métodos relacionados aos eventos de interesse são redefinidos (pelo mecanismo de overriding). Co-
mo a classe adaptadora implementa a interface correspondente WindowListener, assim o fará a
classe derivada. Os métodos não redefinidos herdarão a definição original, que simplesmente ignora
os demais eventos.
A API de eventos AWT de Java define, além de WindowAdapter, as classes adaptadoras Mou-
seAdapter, MouseMotionAdapter e KeyAdapter.
Uma vez que uma classe handler tenha sido criada para responder aos eventos de um compo-
nente, é preciso associar esse componente ao objeto handler. Para tanto, cada tipo de componente
gráfico oferece métodos na forma addXXXListener(XXXListener l) e removeXXXLis-
tener(XXXListener l), onde XXX está associado a algum evento do tipo XXXEvent. Por
exemplo, para o componente Window (e por herança para todas os componentes derivados des-
se) são definidos os métodos public