Sei sulla pagina 1di 4

Linguagem de Programao V

Prof. Giangiacomo Ponzo Neto


Aula 11 Java em Modo Grfico
Introduo
GUI
GUI a sigla para Graphical User Interface (ou Interface Grfica para o Usurio). Vrios ambientes
de desenvolvimento para SOs grficos (VB, Delphi, Power Builder, etc.) so nativamente criados para o uso
com janelas grficas. Em programao web tambm nos valemos de elementos grficos. Porm, em Java,
at agora, s vimos como trabalhar em modo texto, o equivalente ao uso das antigas ferramentas para uso
com Basic, Pascal, C, Clipper, etc. Chegou a hora de ver as janelas em ao.
Os Pacotes Grficos de Java
Em Java, diferentemente de outras linguagens e plataformas, existe mais de uma possibilidade de
uso de pacotes grficos. Para entender melhor: se voc criar um programa grfico de janela no Delphi, por
exemplo, voc vai usar os forms, buttons, labels e outros componentes grficos disponveis na VCL (Visual
Component Library Biblioteca de Componentes Visuais) do Delphi. Embora seja possvel haver outro
grupo de componentes grficos no Delphi, na prtica tudo funciona como se estivessem na VCL. Em Java,
no entanto, existe uma separao muito mais evidente entre os pacotes grficos existentes. O pacote mais
bsico e simples, que nasceu com a linguagem, o pacote AWT (Abstract Window Toolkit Kit de
Ferramentas Abstratas de Janela). Esse pacote, hoje, j est caindo em desuso, mas como muito simples
e fcil de entender, vamos utiliz-lo para nossa primeira incurso no mundo grfico de Java, at porque
faremos as coisas na mo para entender realmente como funcionam 1. No perodo seguinte, veremos o
pacote SWING, mais completo e complexo, j em um ambiente grfico.

O Pacote AWT
O pacote AWT contm as classes necessrias para a gerao de componentes GUI, como
formulrios, painis, botes, caixas de texto, labels, etc.
Frames
Frames so os formulrios bsicos do Java, instncias da classe java.awt.Frame. Um frame
representa a prpria janela, onde fica a barra de ttulos e onde so colocados outros componentes. O frame
o continer (componente que pode receber outros componentes sobre ele) natural do pacote AWT,
embora alguns outros componentes tambm possam ser conteiners (o panel, por exemplo).
A posio dos componentes em um continer determinada pelo tipo de layout escolhido, o que
pode afetar tambm o tamanho dos componentes. Alguns layouts mais comuns: FlowLayout - posiciona
componentes em uma linha ou conjunto de linhas; quando uma linha fica cheia, uma nova linha criada,
BorderLayout - possibilita formatar a posio dos componentes dentro do continer em relao s suas
bordas, GridLayout permite criar linhas e colunas para posicionar os componentes dentro do continer,
NullLayout permite o posicionamento livre dos componentes.
Alguns exemplos de mtodos fundamentais dos frames: setLayout(...) - para definir o tipo de layout
usado, add() - para adicionar componentes (botes, caixas de texto, etc.) ao frame, setVisible(...) - para
tornar o frame visvel.
Panels
So conteiners mais simples que podem ser colocados sobre frames e tambm recebem outros
elementos como botes, labels, etc.

Nunca perca de vista o fato de Java ser uma linguagem de 3a. Gerao, o que exige um maior grau de entendimento
do que acontece por dentro das solues.

Outros Componentes Comuns do Pacote AWT


Button boto, Checkbox caixa de marcao ligado/desligado, Label - linha de texto, TextField
caixa de edio, TextArea caixa de edio com vrias linhas, List caixa de listagem com vrios itens.
Outros componentes tambm fazem parte do AWT, mas por ora vamos focar apenas nos mais comuns,
para entendermos como a coisa funciona.
Exemplos Grficos Simples
Frame com 1 boto e dois layouts possveis
import java.awt.*;
public class Exemplo1 {
public static void main(String args[]) {
Frame f = new Frame("Meu Frame");
Button b = new Button("OK");
f.setLayout(new FlowLayout());
f.add(b);
// ou troque as duas linhas acima pelas duas abaixo:
//f.setLayout(new BorderLayout());
//f.add("North",b);
f.setSize(400,200);
f.setVisible(true);
}
}

Obs.: repare que o "x" para fechar a janela no funciona... Ainda. Para fechar a janela: feche o
ambiente onde o programa foi executado ou interrompa o aplicativo no Gerenciador de Tarefas ou, se o
ambiente permitir, interrompa o processo rodado (no JCreator, h um stop tool no menu para isso).
Frame com 2 labels (maior de dois nmeros aleatrios)
import java.awt.*;
public class Exemplo2 {
public static void main(String args[]) {
Frame f = new Frame();
Label l1 = new Label();
Label l2 = new Label();
f.setLayout(new BorderLayout());
f.add("North",l1);
f.add("South",l2);
// teste com East, West e Center tambm
f.setSize(300,100);
f.setVisible(true);
f.setTitle("Programa Grafico");
int N1 = (int) (Math.random()*100);
int N2 = (int) (Math.random()*100);
l1.setText("Numeros: "+N1+" e "+N2);
if (N1>N2) {
l2.setText("O maior e' "+N1);
}
else {
l2.setText("O maior e' "+N2);
}
}
}

Frame criado como subclasse (muitas explicaes em sala...)


import java.awt.*;
public class Exemplo3 extends Frame {
String x = "Alo mundo!";

//construtor
public Exemplo3(String x) {
super(x);
}
public void paint (Graphics g) {
g.setColor(Color.red);
g.drawString(x,50,50);
}
public static void main (String arg []) {
Exemplo3 ex3 = new Exemplo3("Novo Frame!");
ex3.setSize(200,200);
ex3.setVisible(true);
}
}

Eventos
Da mesma forma que existe mais de um pacote grfico em Java, tambm existe mais de uma forma
de tratar eventos. A forma mais antiga prev aes de forma mais simples e ainda pode ser usada quando a
complexidade for mnima (embora seja considerado ultrapassado - deprecated). O modelo mais atual se
vale de listeners (escutadores) de eventos. Mais profundidade nos eventos ser vista no prximo perodo.

Exemplo com o modelo antigo de eventos (usando o mtodo action)


import java.awt.*;
public class Evento extends Frame {
private static int i;
private static Button b1;
public static void main (String arg[]) {
Evento e=new Evento();
e.setSize(400,200);
e.setLayout(null);
e.setVisible(true);
b1=new Button("clique aqui");
b1.setBounds(40,60,100,30);
e.add(b1);
i=0;
}
public boolean action(Event e,Object o) {
if (e.target.equals(b1)) {
i++;
b1.setLabel("clicou "+i+" vezes");
}
return(true);
}
}
Exerccio
1) crie um Label e escreva "clicou x vezes" no Label em vez do Button.
Exemplo com listeners de eventos e vrios componentes
import java.awt.*;
import java.awt.event.*;
public class Form extends Frame implements ActionListener {
// instancia um label privado e static
private static Label label1 = new Label();
// um dos mtodos de ActionListener que permite resposta a eventos:

public void actionPerformed(ActionEvent e) {


String caption = e.getActionCommand();
if (caption=="Fechar") {
System.exit(0);
}
if (caption=="Clique aqui!") {
label1.setText("Mudei!");
}
}
// construtor da classe com Listener para poder fechar a janela no "x"
public Form() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
} );
}
public static void main(String args[]) {
Form form1 = new Form(); // instancia o form
form1.setLayout(null);
form1.setSize(400,200); // define o tamanho
form1.setTitle("Meu Form AWT"); // seta o ttulo da janela
form1.setVisible(true); // torna o form visvel
label1.setText("Al, mundo!"); // seta o texto
label1.setBounds(20,30,100,30); // define posio e tamanho na tela
form1.add(label1); // adiciona o label ao form
Button button1 = new Button();
button1.setLabel("Fechar");
button1.setBounds(60,80,100,30);
form1.add(button1);
button1.addActionListener(form1); // adiciona o Listener ao button
Button button2 = new Button();
button2.setLabel("Clique aqui!");
button2.setBounds(180,80,100,30);
form1.add(button2);
button2.addActionListener(form1);
TextField edit1 = new TextField(); // s para ver um textfield...
edit1.setText("Digite qualquer coisa aqui...");
edit1.setBounds(60,130,180,25);
form1.add(edit1);
}
}

Obs1: repare que foi especificado o layout como null, ento pudemos definir posies e tamanhos
livremente com o setBounds. O uso de layouts "na mo" complexo e trabalhoso. No esse o nosso
objetivo aqui, queremos apenas entender como funciona o mecanismo Java para componentes grficos e
eventos. Para desenhos mais elaborados, devemos usar ferramentas grficas como o NetBeans.
Obs2: preste ateno nos atributos definidos como static. Eles foram definidos assim para
poderem ser usados no main que static tambm (caso contrrio, no poderiam ser usados nele).
Exerccios
1) Altere o exerccio acima para escrever no Label o contedo do TextField.
2) Altere o segundo exemplo (maior de dois nmeros) para o usurio digitar os nmeros e a resposta
s vir depois de apertar um boto.

Potrebbero piacerti anche