Você está na página 1de 36

UNIDADE II PROGRAMAO UTILIZANDO AMBIENTE VIRTUAL EM JAVA OBJETIVOS Construir janelas grficas utilizando a linguagem Java e seus pacotes

es AWT e SWING, possibilitando assim a construo de formulrios para a gerao de prottipos para uma aplicao Desktop. Implementar eventos nos componentes grficos para que se possa ter trocas de mensagens entre eles.

Quando se fala em Interfaces Grficas em Java, deve-se ter em mente dois pacotes importantes: AWT (java.awt) e SWING (java.swing). Quando foi

desenvolvida a primeira plataforma de distribuio em Java, a SUN implementou o pacote AWT para que os desenvolvedores pudessem realizar as interaes grficas com os componentes conhecidos de ambientes grficos de tal forma que s era necessrio ser compilado em um determinado ambiente e poderia ser executado em qualquer lugar. Porm, esses componentes sofreram alguns erros, que eram diferentes para cada plataforma a qual era executado, o que acabou inviabilizando, por um determinado tempo, o projeto de uma programao com interface grfica multiplataforma em Java. Para ser resolvido o problema, foi liberado um novo pacote de interface grfica chamado SWING que possua novos componentes e alguns outros revisados do pacote AWT que assim, o objetivo foi atingido, pois estes componentes no so sobrecarregados com as capacidades complexas da plataforma onde esto sendo utilizados. Deve-se ter em mente que o pacote SWING no veio substituir o pacote AWT, ele uma camada disposta confortavelmente sobre o AWT (SILVA, 2004, pg.32), sendo assim, em uma programao utilizando interface grfica, ser necessrio conhecer os componentes dos dois pacotes pois podero ser teis no decorrer da programao.

2.1 - CLASSES ESSENCIAIS DO AWT

O pacote AWT possui algumas classes que no possuem uma outra correspondente no pacote SWING, dentre eles, destaca-se: Component, Container, Color, Dimension, e Font.

2.1.1 Component Esta classe representa as caractersticas comuns de todos os componentes (SANTOS,2004, pg.330), Como uma classe abstrata, no realizada uma instncia direta, porm, como todos os componentes derivam dela, importante ter um conhecimento bsico a seu respeito.

2.1.2 - Container Esta classe representa um componente que poder abrigar outros componentes dentro de si, dentre eles, destacam-se as janelas e painis que sero vistos nas suas verses dentro do pacote SWING.

DICA Para diferenar um componente que possui uma verso tanto no pacote SWING quanto no pacote AWT, o do pacote SWING vem com a letra J na frente do seu nome, como por exemplo, Panel no pacote AWT e JPanel, no pacote SWING.

2.1.3. Color A classe Color encapsula as cores no padro RGB (vermelho, verde e azul), informando um valor para cada parmetro no seu mtodo construtor.

Exemplo: Color verde = new Color(0,255,0);

2.1.4 Dimension Enquanto a classe Color encapsula as cores do padro RGB, a classe Dimension encapsula as dimenses (largura e altura) de um objeto.

Exemplo: Dimension tamanho = new Dimension(200,30);

2.1.5 - Font A classe Font representa as caractersticas das fontes que so usadas para interpretar textos de modo a poder ser visualizado (SANTOS, 2004, pg. 333).

Exemplo: Font fonte = new Font(Arial, Font.BOLD, 14)

2.2 - COMPONENTES

2.2.1. - Janelas A janela mais comum utilizada deriva da classe JFrame. Um componente JFrame um continer estendido da casse Frame do pacote AWT e a adio de um componente neste continer feita da seguinte forma:

JFrame frame = new JFrame(); Frame.getContentPane().add(<nome do componente>);

Exemplo: O cdigo abaixo realiza a construo de uma Janela:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

import java.awt.Color; import java.awt.Dimension; import javax.swing.JFrame; public class Janela extends JFrame { public Janela(String titulo, Dimension tamanho) { setTitle(titulo); setSize(tamanho); getContentPane().setLayout(null); getContentPane().setBackground(new Color(200,220,200)); } public static void main(String[] args) {

16 17 18 19 20

Janela janela = new Janela("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,200)); janela.show(); } } Entre as linhas 7 e 13 foram definidos os parmetros para a construo da janela utilizando alguns mtodos, dentre eles setTitle() (ajuste do ttulo da Janela), setSize() (ajuste da dimenso da janela), setLayout(null) (ajuste do layout, que ser visto mais tarde no item gerenciadores de layout), setBackGround(new

Color(200,220,200)) que ajusta a cor de fundo da janela. Outro ponto importante que esta classe uma sub-classe da classe JFrame, como pode ser visto na linha 5. Resultado final est na fig. 12.

Fig 1 - Exemplo da Construo de uma Janela

2.2.1.1. Gerenciadores de Layout Para realizar o posicionamento de um elemento em uma Janela pode ser utilizado os mtodos setSize(), setLocation() e setBounds() que atravs de coordenadas x e y posiciona com uma preciso manual. Todavia, existem recursos que aplicam um conjunto de regras predefinidas, determinando o tamanho e a posio de cada componente em um continer (SANTOS, 2004, pg. 367). Estes recursos chamam-se gerenciadores de layout. Dentre os gerenciadores de layout, destacam-se:

a) Layout de Fluxo

A classe FlowLayout representa o layout que alinha os componentes da esquerda para a direita e de cima para baixo, como um texto em pargrafo. Ele se faz presente no pacote Java.awt. FlowLayout (Fig.13).

Fig 2 - Estilo de Layout FlowLayout

b) Layout de Bordas A classe BorderLayout posiciona os componentes em cinco regies no continer, so elas:

BorderLayout.NORTH: Posiciona na parte superior do continer; BorderLayout.SOUTH: Posiciona na parte inferior do continer; BorderLayout.EAST: Posiciona na regio direita; BorderLayout.WEST: Posiciona n regio esquerda; BorderLayout.CENTER: Posiciona na regio central.

Esta classe se encontra no pacote Java.awt.BorderLayout e a sua diviso se d como se pode ver na fig.14.

Fig 3 - Diviso do Layout travs do Border Layout

c) Layout de Grade Neste tipo de layout, o continer dividido em clulas retangulares de tamanhos iguais e cada componente ir ocupar uma clula diferente (Fig.15). Este layout representado pela classe GridLayout, do pacote Java.awt.GridLayout.

Fig 4 - Ajuste dos componentes de acordo com o GridLayout

d) Layout de Ficha Um Gerenciador de Layout de fichas trata cada componente que pertence ao continer como uma ficha ou um carto (SANTOS, 2004, pg.373). O Continer age como uma pilha de fichas, exibindo o primeiro componente que foi adicionado na primeira vez que a janela for exibida. O representante desse layout a classe CardLayout que est presente no pacote Java.awt.CardLayout.

e) Layout Flexvel Existe um layout que deixa bem flexvel o posicionamento dos componentes, permitindo que estes sejam posicionados de forma horizontal e vertical sem que seja necessrio que estejam com o mesmo tamanho. O representante desse layout o GridBagLayout, que se encontra na classe java.awt.GridBagLayout.

Pode-se trabalhar com o continer sem um layout definido, como foi feito na linha 11 do cdigo anterior, porm isso pode acarretar problemas na portabilidade das janelas, j que os componentes dimensionados e posicionados com valores absolutos podem ter diferentes comportamentos para cada plataforma.

2.2.2 - Rtulos Para ser adicionado um texto curto, uma imagem ou ambos, utiliza-se um rtulo que deriva da classe javax.swing.JLabel que por sua vez, deriva da classe javax.swing.JComponent. O rtulo por exibir uma linha de texto, normalmente o seu contedo no modificado.

JLabel l1 = new JLabel(); l1.setText(Universidade da Amaznia); l1.setSize(370,50); l1.setBackground(new Color(0,255,0));

Exemplo na aplicao:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import javax.swing.JFrame; import javax.swing.JLabel; public class Janela extends JFrame { public Janela(String titulo, Dimension tamanho) { JLabel L1 = new JLabel(); JLabel L2 = new JLabel(); L1.setText("Nome do Usurio:"); L1.setLocation(10,10); L1.setFont( new Font("Arial",Font.BOLD,21)); L1.setForeground(new Color(0,0,170)); L1.setSize(370,50); L2.setText("Senha:"); L2.setLocation(10,70); L2.setFont( new Font("Arial",Font.BOLD,21)); L2.setForeground(new Color(0,0,170)); L2.setSize(370,50); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(null); getContentPane().setBackground(new Color(200,220,200));

31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

getContentPane().add(L1); getContentPane().add(L2); }

public static void main(String[] args) { Janela janela = new Janela("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,200)); janela.show(); } } } Nas linhas 11 e 12 foram instanciados dois objetos de Rtulo L1 e L2, que tiveram os ajustes em seus atributos entre as linhas 14 e 24 e foram adicionados ao continer da Janela nas linhas 31 e 32. Resultado pode ser visto na fig. 16.

Fig 5 - Janela com o JLabel

2.2.3 Botes Um boto um componente que pode ser pressionado pelo usuario (SANTOS,2004, pg.350) e n pacote swing, tem-se o seu representante a classe JButton. JButton b1 = new JButton(); b1.setText(Confirmar); b1.setBounds(50,30,100,30); b1.setBackground(new Color(0,0,170)); b1.setIcon(new ImageIcon(Confirmar.gif));

Alguns mtodos da classe JButton podem ser vistos no Quadro 2.


Quadro 1 - Mtodos da classe JButton

setText() setBackground() setBounds() setForeground() setFont() setToolTipText() setIcon() setHorizontalAlignment() setVerticalAlignment()

Define o texto Define a cor de fundo Define o tamanho e a posio continer Define a cor do texto. Define o tipo, o estilo e o tamanho fonte Define uma dica Define um cone para o boto Define o alinhamento horizontal contedo Define o alinhamento vertical contedo

do

da

do do

Exemplo na Aplicao: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class Janela extends JFrame { public Janela(String titulo, Dimension tamanho) { JLabel L1 = new JLabel(); JLabel L2 = new JLabel(); JButton B1 = new JButton(); JButton B2 = new JButton(); L1.setText("Nome do Usurio:"); L1.setLocation(10,10); L1.setFont( new Font("Arial",Font.BOLD,21)); L1.setForeground(new Color(0,0,170)); L1.setSize(370,50); L2.setText("Senha:"); L2.setLocation(10,70); L2.setFont( new Font("Arial",Font.BOLD,21)); L2.setForeground(new Color(0,0,170)); L2.setSize(370,50); B1.setText("Entrar");

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

B1.setBounds(50,120,100,30); B1.setBackground(new Color(150,150,150)); B1.setForeground(Color.WHITE); B2.setText("Sair"); B2.setBounds(250,120,100,30); B2.setBackground(new Color(150,150,150)); B2.setForeground(Color.WHITE);

setTitle(titulo); setSize(tamanho); getContentPane().setLayout(null); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(L1); getContentPane().add(L2); getContentPane().add(B1); getContentPane().add(B2); } public static void main(String[] args) { Janela janela = new Janela("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,200)); janela.show(); } } O Resultado pode ser visto na Fig. 17.

Fig 6- Uma janela com Botes e Rtulos

2.2.4. Painis

Servem para dividir a janela, possibilitando assim maior controle da organizao de interfaces grficas mais complexas e, juntamente com o gerenciador de layout, auxiliam no posicionamento dos componentes. A classe mais utilizada na construo do Panel a classe JPanel do pacote swing. JPanel p1 = new JPanel(); p1.setLayout(null); p1.setBounds(10,10,170,70); p1.setBackground(Color.green); Para adicionar um elemento: p1.add(<componente1>); p1.add(<componente2>);

2.2.5 Campos de Texto. Para a entrada de Texto, comum ser utilizada a classe JTextField do pacote javax.swing.JTextField e que deriva da classe JTextComponent. Tem-se o cdigo abaixo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class Janela extends JFrame { public Janela(String titulo, Dimension tamanho) { JLabel L1 = new JLabel(); JLabel L2 = new JLabel(); JButton B1 = new JButton(); JButton B2 = new JButton(); JTextField T1 = new JTextField(); JTextField T2 = new JTextField(); T1.setText(""); T1.setHorizontalAlignment(JTextField.CENTER);

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72

T2.setDisabledTextColor(Color.red); T2.setBackground(Color.WHITE); L1.setText("Nome do Usurio:"); L1.setLocation(10,10); L1.setFont( new Font("Arial",Font.BOLD,21)); L1.setForeground(new Color(0,0,170)); L1.setSize(370,50); L2.setText("Senha:"); L2.setLocation(10,70); L2.setFont( new Font("Arial",Font.BOLD,21)); L2.setForeground(new Color(0,0,170)); L2.setSize(370,50); B1.setText("Entrar"); B1.setBounds(50,120,100,30); B1.setBackground(new Color(150,150,150)); B1.setForeground(Color.WHITE); B2.setText("Sair"); B2.setBounds(250,120,100,30); B2.setBackground(new Color(150,150,150)); B2.setForeground(Color.WHITE);

setTitle(titulo); setSize(tamanho); getContentPane().setLayout(new GridLayout(3,2,5,5)); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(L1); getContentPane().add(T1); getContentPane().add(L2); getContentPane().add(T2); getContentPane().add(B1); getContentPane().add(B2); } public static void main(String[] args) { Janela janela = new Janela("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,200)); janela.show(); } }

Nas linhas 20 e 21 so instanciados dois objetos da classe JTextField que tero os valores de seus atributos ajustados nas linhas 23 a 27. Estes componentes so adicionados no continer nas linhas 58 e 60.

REFLEXO Este cdigo est utilizando um gerenciador de layout do formato de GridLayout (linha 54), dividindo em 4 espaos. Analise a razo dos elementos serem adicionados na seqncia que ficaro na janela (linhas 57 a 62).

Resultado do cdigo acima:

Fig 7 - Janela com um Layout e com JTextFields

2.2.6 CAMPOS DE SENHA Para se tenha uma caixa de entrada ocultando a informao que digitada, deve-se utilizar o componente JPasswordField que tem compatibilidde com o componente JTextField. Para escolher o smbolo que ir ocultar a mensagem, utiliza-se o mtodo serEchoChar(). Exemplo da utilizao do JPasswordField na Janela acima: 1 2 3 4 5 6 7 8 import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPasswordField;

9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58

import javax.swing.JTextField; public class Janela extends JFrame { public Janela(String titulo, Dimension tamanho) { JLabel L1 = new JLabel(); JLabel L2 = new JLabel(); JButton B1 = new JButton(); JButton B2 = new JButton(); JTextField T1 = new JTextField(); JPasswordField T2 = new JPasswordField(); T1.setText(""); T1.setHorizontalAlignment(JTextField.CENTER);

T2.setDisabledTextColor(Color.red); T2.setBackground(Color.WHITE); T2.setEchoChar('&'); L1.setText("Nome do Usurio:"); L1.setLocation(10,10); L1.setFont( new Font("Arial",Font.BOLD,21)); L1.setForeground(new Color(0,0,170)); L1.setSize(370,50); L2.setText("Senha:"); L2.setLocation(10,70); L2.setFont( new Font("Arial",Font.BOLD,21)); L2.setForeground(new Color(0,0,170)); L2.setSize(370,50); B1.setText("Entrar"); B1.setBounds(50,120,100,30); B1.setBackground(new Color(150,150,150)); B1.setForeground(Color.WHITE); B2.setText("Sair"); B2.setBounds(250,120,100,30); B2.setBackground(new Color(150,150,150)); B2.setForeground(Color.WHITE); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(new GridLayout(3,2,5,5)); getContentPane().setBackground(new Color(200,220,200));

59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

getContentPane().add(L1); getContentPane().add(T1); getContentPane().add(L2); getContentPane().add(T2); getContentPane().add(B1); getContentPane().add(B2); } public static void main(String[] args) { Janela janela = new Janela("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,200)); janela.show(); } } O Resultado deste cdigo pode ser visto na fig.19.

Fig 8 - Janela com JPsswordField

2.2.7 REA DE TEXTO Quando necessrio capturar um texto com mltiplas linhas, pode-se utilizar um componente chamado JTextArea, que, por possuir a mesma superclasse das classes JTextField e JPasswordField, algumas de suas caractersticas so comuns a estas duas classes.

Exemplo da utilizao da rea de Texto: 1 2 3 4 5 import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import javax.swing.*;

6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

public class Janela2 extends JFrame { public Janela2(String titulo, Dimension tamanho) { JLabel L1 = new JLabel(); JTextArea A1 = new JTextArea(); JButton B1 = new JButton(); L1.setText("Deixe a sua opinio aqui sobre o guia de Programao II:"); L1.setLocation(10,10); L1.setFont( new Font("Arial",Font.BOLD,21)); L1.setForeground(new Color(0,0,170)); L1.setSize(600,50); A1.setBackground(Color.WHITE); A1.setBounds(10,70,570,100); B1.setText("Enviar"); B1.setBounds(250,180,100,30); B1.setBackground(new Color(150,150,150)); B1.setForeground(Color.WHITE); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(null); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(L1); getContentPane().add(A1); getContentPane().add(B1); } public static void main(String[] args) { Janela2 janela = new Janela2("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(600,250)); janela.show(); } }

Na Fig.20, tem-se o resultado do cdigo acima.

Fig 9 - Janela com um JTextArea

2.2.8 BARRAS DE ROLAGEM Para implementar uma barra de rolagem comum, deve-se utilizar o componente JScrollBar que facilita a exibio do contedo de uma janela. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import javax.swing.*; public class Janela3 extends JFrame { public Janela3(String titulo, Dimension tamanho) { JScrollBar S1 = new JScrollBar(JScrollBar.HORIZONTAL,0,0,0,300); JScrollBar S2 = new JScrollBar(JScrollBar.VERTICAL,0,0,0,150); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(new BorderLayout()); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(S1,BorderLayout.SOUTH); getContentPane().add(S2,BorderLayout.EAST); } public static void main(String[] args) { Janela3 janela = new Janela3("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(600,250));

27 28 29 30

janela.show(); } } O Resultado do cdigo anterior, na Fig.21.

Fig 10 - Janela com o JScrollBar

2.2.9 PAINIS DE ROLAGEM Os painis de rolagem servem para que se possa ser visualizado o contedo de um componente de texto, adicionando-o a ele. O represente desse componente o JScrollPane, da classe javax.swing.JScrollPane. O Cdigo Abaixo ir gerar um componente JTextArea com um Painel de Rolagem: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import java.awt.Color; import java.awt.Dimension; import java.awt.GridLayout; import javax.swing.*; public class Janela4 extends JFrame { public Janela4(String titulo, Dimension tamanho) { JTextArea A1 = new JTextArea(); JScrollPane P1 = new JScrollPane(A1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.H ORIZONTAL_SCROLLBAR_ALWAYS); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(new GridLayout(1,2,5,5)); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(P1); } public static void main(String[] args)

22 23 24 25 26 27

{ Janela4 janela = new Janela4("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(600,250)); janela.show(); } } O resultado estar na figura abaixo:

Fig 11 - Uma Janela com JTextArea

2.2.10 CAIXA DE CHECAGEM So Componentes que podem ser marcados ou desmarcados. A classe que representa esse componente a JCheckBox, do pacote Swing.Um Exemplo da caixa de checagem:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

import javax.swing.*; import java.awt.*; public class Janela5 extends JFrame { public Janela5(String titulo, Dimension tamanho) { JLabel L1 = new JLabel(); JCheckBox C1 = new JCheckBox(); JCheckBox C2 = new JCheckBox(); L1.setText("Informe a sua Esolha:"); L1.setBounds(0,0,300,30); L1.setFont(new Font("Arial",Font.BOLD,14)); C1.setText("J sei programar de forma Orientada a Objetos");

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41

C1.setSelected(true); C1.setBounds(20,40,550,40); C1.setFont(new Font("Arial",Font.BOLD,14)); C2.setText("Ainda No sei Programar de forma Orientada a Objetos"); C2.setSelected(false); C2.setBounds(20,80,550,40); C2.setFont(new Font("Arial",Font.BOLD,14)); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(null); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(L1); getContentPane().add(C1); getContentPane().add(C2); } public static void main(String[] args) { Janela5 janela = new Janela5("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(600,175)); janela.show(); } }

Resultado do cdigo acima (Fig.23)

Fig 12 - Caixa de Checagem em uma Janela

DICA Para informar se a caixa de checagem est ou no marcada, utiliza-se o mtodo setSelected(), como nas linhas 17 e 22.

2.2.11 BOTES DE RADIO So componentes semelhantes a caixa de checagem e que so representados pela classe JRadioButton. A diferena entre a caixa de checagem e os botes de radio que estes podem trabalhar em conjunto com uma outra classe, a ButtonGroup, que impede que mais de um item sejam selecionados ao mesmo tempo. Tem-se o exemplo abaixo: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 import javax.swing.*; import java.awt.*; public class Janela6 extends JFrame { public Janela6(String titulo, Dimension tamanho) { JLabel L1 = new JLabel(); JRadioButton R1 = new JRadioButton(); JRadioButton R2 = new JRadioButton(); L1.setText("Informe a sua Esolha:"); L1.setBounds(0,0,300,30); L1.setFont(new Font("Arial",Font.BOLD,14)); R1.setText("J sei programar de forma Orientada a Objetos"); R1.setSelected(true); R1.setBounds(20,40,550,40); R1.setFont(new Font("Arial",Font.BOLD,14)); R2.setText("Ainda No sei Programar de forma Orientada a Objetos"); R2.setSelected(false); R2.setBounds(20,80,550,40); R2.setFont(new Font("Arial",Font.BOLD,14)); ButtonGroup G1 = new ButtonGroup(); G1.add(R1); G1.add(R2); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(null); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(L1); getContentPane().add(R1); getContentPane().add(R2); } public static void main(String[] args) {

41 42 43 44 45

Janela6 janela = new Janela6("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(600,175)); janela.show(); } } Entre as linhas 26 a 28 tem-se a declarao de um objeto ButtonGroup que adiciona os componentes R1 e R2 e no permite que mais de um deles sejam selecionados. O Resultado do cdigo acima pode ser visto na figura 24.

Fig 13 - Botes de Radio

2.2.12 CAIXAS DE COMBINAO Em Java, a classe que representa uma caixa de combinao a classe JComboBox, que nada mais que um componente que combina um boto com uma lista suspensa. Exemplo de uma caixa de combinao: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import javax.swing.*; import java.awt.*; public class Janela7 extends JFrame { public Janela7(String titulo, Dimension tamanho) { String[] Disciplinas = {"Programao I", "Programao II", "Programao III", "Programao IV"}; JLabel L1 = new JLabel(); JComboBox C1 = new JComboBox(Disciplinas); L1.setText("Disciplina preferida :"); L1.setBounds(0,0,300,30); L1.setFont(new Font("Arial",Font.BOLD,14)); C1.setMaximumRowCount(5); C1.setBounds(40,40,300,30);

20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

setTitle(titulo); setSize(tamanho); getContentPane().setLayout(null); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(L1); getContentPane().add(C1); } public static void main(String[] args) { Janela7 janela = new Janela7("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,175)); janela.show(); } } O que foi adicionado ao componente foi um vetor de String, chamado disciplina e foi utilizado o mtodo setMaximumRowCount() na linha 19 para informar a qualtidade mxima de elementos que ele poderia exibir. O Resultado ser visto na figura 25.

Fig 14 Caixa de Combinao

2.2.13 LISTA As listas so componentes que permitem ao usurio escolher uma ou mais opes predefinidas (SANTOS, 2004, pg.402). O representante em java de uma lista a classe JList, pertencente ao pacote javax.swing.JList. Exemplo da utilizao de uma Lista: 1 2 3 4 import javax.swing.*; import java.awt.*; public class Janela8 extends JFrame

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

{ public Janela8(String titulo, Dimension tamanho) { String[] Disciplinas = {"Programao I", "Programao II", "Programao III", "Programao IV"}; JLabel L1 = new JLabel(); JList LT1 = new JList(Disciplinas); L1.setText("Disciplina preferida :"); L1.setBounds(0,0,300,30); L1.setFont(new Font("Arial",Font.BOLD,14)); LT1.setBounds(40,40,300,70); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(null); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(L1); getContentPane().add(LT1); } public static void main(String[] args) { Janela8 janela = new Janela8("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,175)); janela.show(); } } O resultado ser como pode ser visto na Fig. 26.

Fig 15 - Uma Janela com uma Lista

2.2.14 MENU SUSPENSO Para a construo de um menu suspenso, necessrio o estudar cinco classes distintas: JMenuBar, JMenu, JMenuItem, JRadioButtonMenuItem e

JCheckBoxMenuItem.

Alguns pontos importantes:

a) A Barra de Menu representada pela classe JMenuBar; b) Os Menus so representados pela classe JMenu; c) Cada item do menu representado pela classe JMenuItem, que pode ter, alm de sua variao padro, uma forma de Boto de adio (JRadioButtonMenuItem) ou de uma caixa de checagem (JCheckBoxMenuItem).

Exemplo da Construo de um Menu:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

import javax.swing.*; import java.awt.*; public class Janela9 extends JFrame { public Janela9(String titulo, Dimension tamanho) { JMenuBar barra = new JMenuBar(); JMenu M1 = new JMenu("Arquivo"); JMenu M2 = new JMenu("Editar"); JMenu M3 = new JMenu("Exibir"); JMenu M4 = new JMenu("Ferramentas"); JMenu M5 = new JMenu("Sobre"); JMenu M6 = new JMenu("Ajuda"); JMenuItem MI1 = new JMenuItem("Calculadora"); M4.add(MI1); barra.add(M1); barra.add(M2); barra.add(M3); barra.add(M4); barra.add(M5); barra.add(M6); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(new BorderLayout()); getContentPane().setBackground(new Color(200,220,200)); setJMenuBar(barra);

29 30 31 32 33 34 35 36 37

} public static void main(String[] args) { Janela9 janela = new Janela9("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,175)); janela.show(); } } Percebe-se que para formar a hierarquia do menu, o objeto barra adiciona os objetos Menus e os Itens de Menus so adicionados aos Menus. O Resultado est na figura 27.

Fig 16 - Menu Suspenso

DICA Na Linha 28, como o objeto estende de um JFrame, basta ajustar o setJMenubar() com o parmetro do componente de menu que ele ir possuir.

2.2.15 GRADE Toda vez que se necessrio trabalhar com uma estrutura de dados na forma de linha e coluna, tem-se que trabalhar com uma Grade, que, em Java, representada pela classe JTable, do pacote javax.swing.JTable.

Exemplo de uma grade em Java:

1 2 3

import javax.swing.*; import java.awt.*;

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

public class Janela11 extends JFrame { public Janela11(String titulo, Dimension tamanho) { String[] cabeca = {"Disciplina","Nota"}; Object[][] itens = {{"Matemtica II","9,0"}, {"Aplicaes em MicroInformtica","10,0"}, {"Engenharia de Software I","8,0"}, {"Programao II","7,0"}, {"Rede de Computadores","6,5"}, {"Atividades Complementares","10,0"}}; JTable tabela = new JTable(itens,cabeca); tabela.setBounds(0,0,350,100); tabela.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); tabela.setCursor(new Cursor(Cursor.HAND_CURSOR)); JScrollPane P1 = new JScrollPane(tabela); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(new BorderLayout()); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(P1); } public static void main(String[] args) { Janela11 janela = new Janela11("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,175)); janela.show(); } } Para instanciar um objeto do tipo JTable, necessrio que sejam passados dois parmetros, um para o ttulo e outro para os itens, que um vetor bidimensional. Todavia, no se deve esquecer de associar a grade a um Painel mvel, como foi feito na linha 22. Resultado do cdigo acima est na figura 28.

Fig 17 - Grade em uma Janela

2.3 - EVENTOS Para que exista a manipulao dos objetos e que eles possam reagir s aes do usurio, dever ocorrer um disparo para cada ao, que sero representados pelos eventos. Uma das formas de declarar um evento implementar os mtodos da interface ActionListener que ouve os eventos de ao e pode ser registrada com a maioria dos componentes do aplicativo (SILVA, 2004, pg.60). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Janela13 extends JFrame { JTextField T1 = new JTextField(); JPasswordField T2 = new JPasswordField(); public Janela13(String titulo, Dimension tamanho) { JLabel L1 = new JLabel(); JLabel L2 = new JLabel(); JButton B1 = new JButton(); JButton B2 = new JButton(); T1.setText(""); T1.setHorizontalAlignment(JTextField.CENTER);

T2.setDisabledTextColor(Color.red); T2.setBackground(Color.WHITE); T2.setEchoChar('&'); L1.setText("Nome do Usurio:");

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

L1.setLocation(10,10); L1.setFont( new Font("Arial",Font.BOLD,21)); L1.setForeground(new Color(0,0,170)); L1.setSize(370,50); L2.setText("Senha:"); L2.setLocation(10,70); L2.setFont( new Font("Arial",Font.BOLD,21)); L2.setForeground(new Color(0,0,170)); L2.setSize(370,50); B1.setText("Entrar"); B1.setBounds(50,120,100,30); B1.setBackground(new Color(150,150,150)); B1.setForeground(Color.WHITE); B1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ((T1.getText().trim().equals("unama")) && (T2.getText().trim().equals("senha"))) JOptionPane.showMessageDialog(null, "Usurio e senhas vlidos"); else JOptionPane.showMessageDialog(null,"usurio e senhas invlidos"); } }); B2.setText("Sair"); B2.setBounds(250,120,100,30); B2.setBackground(new Color(150,150,150)); B2.setForeground(Color.WHITE); B2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); } }); setTitle(titulo); setSize(tamanho); getContentPane().setLayout(new GridLayout(3,2,5,5)); getContentPane().setBackground(new Color(200,220,200)); getContentPane().add(L1); getContentPane().add(T1); getContentPane().add(L2);

78 79 80 81 82 83 84 85 86 87 88 89 90 91 92

getContentPane().add(T2); getContentPane().add(B1); getContentPane().add(B2); } public static void main(String[] args) { Janela13 janela = new Janela13("IFPA - Instituto Federal de Ensino, CIncia e Tecnologia",new Dimension(400,200)); janela.show(); } }

Entre as linhas 44 e 55 foi adicionado ao boto B1 um evento para realizar a validao do usurio e senha que neste formulrio ser inserido. Para isso, dentro da ao addActionListener() foi instanciado um novo objeto ActionListener onde possvel alterar o seu mtodo actionPerformed() que ir implementar a reao ao estimulo que o objeto sofreu. Com a adio de eventos, as janelas comeam a ganhar vida e assim um sistema poder ser implementado.

2.4. PROGRAMAO COM INTERFACE GRFICA UTILIZANDO O NETBEANS 5.0. Nesta seo ser desenvolvido um tutorial de como trabalhar com a programao de interface grfica utilizando a IDE NetBeans.

1 Passo: Ao iniciar um projeto, o NetBeans permite que seja crida uma classe j com a extenso com a classe JFrame e ainda disponibiliza os componentes citados anteriormente na seo 2.2 de forma visual, como se pode ver na figuras:

Opo de JFrame Form

Fig 18 - a Opo de JFrame Form no NetBeans 5.0

Alterner Cdigo / Design

Componentes

rea de Design da Janela

Janela da Hierarquia dos Objetos na Janela

Atributos dos Componentes

Fig 19 - Regio onde permitido realizar o design das Janelas

2 Passo: Sempre bom ajustar logo o Layout da Janela de acordo com o Gerenciador escolhido, que poder ser feito clicando com o boto inverso do mouse em cima do JFrame e escolher a opo set Layout, como mostra a Fig 31.

Fig 20 - Escolha do Layout da Janela

3 Passo: Dependendo do Layout escolhido, o desenvolvedor poder implementar a interface grfica que desejar, dispondo os componentes na regio destinada ao design,como mostra a Fig. 32.

Fig 21 - Janela desenhada

4 Passo: Para adicionar um evento a um objeto, basta clicar com o boto inverso do mouse nele e escolher a opo Events, como na fig.33, e assim possivel declarar algum tipo de evento.

Fig 22 - Escolha de um evento para um objeto

DICA Para verificar o cdigo da classe, basta clicar na opo Source, que o NetBeans ir exibir e permitir que seja editado.

SNTESE DA UNIDADE A criao de componentes grficos em Java um misto entre os pacotes AWT e SWING, sendo que o segundo possui verses mais atualizadas de alguns componentes do primeiro. Os contineres so de fundamental importncia para a classe j que sem estes componentes, no possvel

armazenar os componentes grficos na forma de botes, rtulos, de seleo entre outros, e, de acordo com a escolha do Layout do continer, os componentes podero ter uma forma diferente de posicionamento. Os eventos so agregados aos componentes e tm a funo de permitir que aja troca de mensagens entre eles.

Você também pode gostar