Sie sind auf Seite 1von 17

Java Programao Grfica

Uma janela de nvel mais alto chamado de um quadro frame em Java.


A biblioteca AWT tem uma classe baseada em semelhantes, chamada Frame.
A verso Swing dessa classe chamada de JFrame;
a JFrame estende a classe Frame e um dos poucos componentes Swing que no
desenhado em uma ('tela de desenho" chamada canvas.
Assim, as decoraes (botes,.barra de ttulo, cones etc) so desenhadas pelo sistema
de gerenciamento de janelas do usurio e no pelo Swing.
Os quadros so exemplos de contineres.
Um quadro pode conter outro componentes da interface de usurio, como botes e
campos de texto.

Exemplo : FirstTestjava
import javax.swing.*;
class FirstFrame extends Jframe
{ public FirstFrame ()
{ setTitle('FirstFrame');
setSize(300, 200);
}
}
public class FirstTest
{ public static void main(String[] args)
{ Frame frame = new FirstFrameo;
frame.show ();
}
}

Vamos percorrer esse programa, linha por


linha.

As classes Swing so colocadas no pacote javax. swing.

O nome javax do pacote indica um pacote de extenso java, e no um pacote do


ncleo.
No Java 2, o pacote Swing no mais uma extenso, mas faz parte de hierarquia do
ncleo. Nas verses beta do Java 2 acomodou-se como javax.swing
No programa, definimos uma classe FirstFrame, que se comporta exatamente como a
classe JFrame do pacote javax. Swing.
O construtor de First frame coloca na barra de ttulo a string "FirstFrame" e faz o
tamanho do quadro ser de 300 x 200 pixels. A priore, um quadro tem largura e altura
iguais a 0.
O mtodo main mostra o quadro e sai. Isso no termina o programa, mas apenas o
subprocesso principal.
A exibio da janela ativa um subprocesso de interface de usurio que man, tm o
programa "vivo".

Para mostrar realmente um quadro, devem-se executar os seguintes passos:


Criar o objeto quadro usando operador new.
Opcionalmente, posicion-lo na tela do usurio usando o mtodo setlocation.
Chamar o mtodo show para tomar visvel o quadro e traz-lo para frente se estiver
por trs de outra janela.
A linha chave no mtodo main do Exemplo :
JFrame frame = new FirstFrame();
Essa linha cria um novo FirstFrame fornecendo todas as informaes necessrias
para que o sistema de controle de janelas subjacente exiba uma janela.
A chamada de new no exibe o quadro; como mencionamos. necessrio usar os
mtodos show ou setvisible para efetivamente fazer o quadro aparecer na tela.

O padro de quadros visveis tenham dimenses O x O pixels, antes que se possa ver
um quadro torna-se necessrio especificar suas dimenses.
No Exemplo fizemos 300 pixels de largura por 200 pixels de altura usando o mtodo
setsize no construtor do quadro.
Finalmente, o quadro vai aparecer no canto superior esquerdo pois no usamos o
mtodo setlocation a fim de reposicion-lo.
Podemos ter um cdigo para criar e mostrar o quadro colocado no mtodo main da
prpria classe.
public class FirstFrame extends Jframe
{ public FirstFrame ()
{ setTitle('FirstFrame');
setsize (300, 200)
}
public satatic void main(String[] args)
{JFrame freme = new FirstFrame();
frame.show();
}
}

Usar o mtodo main da classe frame para o cdigo que instancia e exibe o quadro
mais simples no sentido de que no se precisa introduzir outra classe auxiliar para fazer
isso.
Alguns programadores consideram esse estilo de cdigo mais confuso e preferem
separar a classe que executa o programa da classe que controla a aparncia e o
comportamento do quadro.

Como Encerrar Programas Grficos


H, infelizmente, um srio problema no programa FirstFrame. Se voc executar o
programa, vai descobrir que no h como sair dele!
No h nada bvio que permita encerrar esse aplicativo, embora a janela possa ter
sido ocultada. Voc vai ver logo como escrever programas Swing que podem ser
encerrados adequadamente.
Pode-se terminar o programa java pressionando ctrl,c ou dando um clique no boto
Fechar no canto superior direito da janela do console, e, alternativamente, pode-se,,
pressionar CTRL+ALT+DEL.

O AWT propicia uma classe chamada WindowAdapter .


class Terminator extends WindowAdapter
{
public void windowClosing (windowEvent e)
System.exit(O);
}
Usando a mgica das classes annimas, podemos at mesmo evitar dar um nome
addwindowlistener (new WindowsAdapter ( )
{ public void windowClosing(WindowEvent e)
{ System.exit(O);
}
});

import java.awt.event.*;
import javax.swing.*;
class CloseableFrame extends Jframe
{ public CloseableFrame ( )
{ setTitle(CloseableFrame);
setSize(300, 200);
addWindowListener(new WindowAdapter ( )
{ public void windowClosing(WindowEvent e)
{
System.exit( );
}
});
}
}
public class CloseableTest
{ public static void main(String[] args)
{
JFrame frame = new CloseableFrame ( )
frame.showo;
}
}

Layout de Quadros
A classe JFrame, por si mesma, somente tem alguns poucos mtodos para alterar a
disposio visual (layout) dos quadros.
Evidentemente, atravs da mgica da herana, a maior parte dos mtodos para se
trabalhar o dimensionamento e o posicionamento de um quadro vem das vrias
superclasses de JFrame.

O mtodo dispose que fecha a janela e recupera os recursos do sistema usados em su


criao.
- O mtodo setIconImage que especifica um objeto image para ser usado como con
quando a janela minimizada .
-

- O mtodo settitle para mudar o texto da barra de ttulo da janela.

- O mtodo setResizeable, que toma um boolean para determinar se um quadro se


redimensionvel pelo usurio.

Exibio de Informaes em um
Quadro

Seria possvel desenhar a string da mensagem diretamente num quadro, mas esta
no seria considerada uma boa prtica de programao.
Em Java, os quadros so projetados realmente somente para serem contineres de
componentes como barras de menu e outros elementos de interface de usurio.
Normalmente desenha-se em outro componente, chamado panel, que adicionado
ao
quadro.

A estrutura de um JFrame surpreendentemente complexa.


A parte que mais interessa aos programadores Swing a rea de contedo.
Ao projetar um quadro, adicionam-se componentes rea de contedo usando
cdigo como o seguinte:

Container painelconteudo = f rame. getContentPane ( )


Component c = ;
painelconteudo.add;
Em nosso caso, queremos adicionar um nico painel rea de contedo na qual
vamos desenhar a mensagem.
Os painis so implementados pela classe JPanel. Eles so elementos da interface
de usurio com duas propriedades teis:

Eles tm uma superfcie na qual se pode desenhar.


Eles so, tambm, recipientes.

Assim, eles podem conter outros componentes de interface como botes, botes
deslizantes, etc.
O cdigo completo para adicionar um painel a um quadro :
Container painelconteudo = frame.getContentPane ( );
JPanel p = new JPanel
painelconteudo. add (p)
javax.swing.JFrame
Container getContentPane ( )
retoma o objeto rea de contedo deste JFrame.

Objetos Grficos e o Mtodo paintcomponent


Sempre que voc precisar de um componente de interface de usurio que seja
semelhante a um dos componentes Swing bsicos, poder usar herana para criar uma
nova classe e depois sobrepor ou adicionar mtodos para obter a funcionalidade extra
necessria.

Por exemplo, nossas classes FirstFrame e CloseableFrame derivaram da classe


Swing JFrame.
Para desenhar em um painel, ser necessrio:
Definir uma classe que estenda JFrame.
Sobrepor o mtodo paintcomponent dessa classe.
O mtodo paintcomponent est, na verdade, na classe icomponent, que uma classe
antecessora de todos os componentes Swing que no so de janela.
Ele recebe um parmetro do tipo Graphics. O parmetro Graphics semelhante a
um contexto de dispositivo do Windows
. Ele tem mtodos para desenhar padres, imagens e texto. Eis como fazer um
painel no qual se pode desenhar:
class MyPanel extends JPanel
{
public void paintComponent(Graphics g)
o cdigo para desenhar vai aqui
Em geral, sempre que se quer colocar mensagens de texto ou grficos em um painel,
necessrio definir uma nova classe e sobrepor o mtodo paintcomponent.

Como vimos no cdigo bsico anterior, o mtodo paintcomponent toma somente um


nico parmetro do tipo Graphics.
Um objeto Graphics lembra uma coleo de especificaes para desenhar imagens e
texto, como a fonte definida ou a cor atual.
Toda ao de desenhar em java precisa usar um objeto Graphics. As medidas de um
objeto Graphics para exibir na tela feita em pixels.
A coordenada (0,0) denota o canto superior esquerdo do componente em cuja
superfcie se est desenhando.

NOTA:
Realmente, o argumento de paintcomponent um objeto do tipo
Graphics2D, uma subclasse da classe Graphics. A classe Graphics2D tem Mtodos
adicionais para desenhos mais sofisticados. A classe conceitualmente mais simples,
Graphics, suficiente para desenhos de linhas retas simples.

A exibio de texto (geralmente chamada de renderizao de texto) considerada


um tipo especial de desenho.
Por exemplo, um objeto Graphics tem um mtodo drawstring que usa a sintaxe
seguinte:
g.drawString(texto, Coordx, Coordy)
Em nosso caso, queremos desenhar a string 'Not a Hello, World program, em nossa
janela original, aproximadamente a um quarto na horizontal e metade na vertical.
O primeiro caractere da string vai comear numa posio 75 pixels a direita e 100
pixels para baixo.
Assim, nosso mtodo paintcomponent ficar assim:
class NotHelloworldPanel extends Jpanel
{

public void paintComponent(Graphics g)


{ .......... rotina de cdigo, ver a seguir
g.drawString('Not a Hello, World program', 75, 100);
}
}

Entretanto, esse mtodo paintcomponent no est completo.


A classe NotHelloWorldPanel estende a classe Tpanel, a qual tem sua prpria idia
sobre como desenhar o painel, que preenche-lo com a cor de fundo.
Para ter certeza de que a superclasse faz sua parte do trabalho, precisamos chamar
super.paintComponent antes de fazer qualquer desenho por conta prpria.
class NotHelloWorldPanel extends Jpanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawstring(Not a Hello, World program, 75, 100);
}
}

Exemplo : NotHelloWorldjava
import java.awt.*;
import java.awt.event.*;
import javax.swing.*,,
class NotHelloworldPanel extends Jpanel
{ public void paintComponent(Graphics g)
{ super.paintComponent(g);
g.drawString('Not a Hello, World program', 75, 100);
}
}
class NotHelloWorldFrame extends Jframe
{ public NotHelloWorldFrame ( )
{ setTitle('NotHelloWorld');
setSize(300, 200);
addWindowListener(new WindowAdaptero
public void windowClosing(WindowEvent e)
{ System.exit(O);
}
});
Container contentpane = getContentPaneo;
contentpane.add(new NotHelloworldPane ( ));
}
}
public class NotHelloWorld
{
public static void main(String[] args)
{ JFrame freme = new NotHelloWorldFrame ( );
frame.show ( ); }

Das könnte Ihnen auch gefallen