Docstoc

Exemplos de programas com interface gráfica em Java_1_

Document Sample
Exemplos de programas com interface gráfica em Java_1_ Powered By Docstoc
					Linguagem de Programação V
Prof. Giangiacomo Ponzo Neto
Aula 11 – Java em Modo Gráfico

                                              Introdução
GUI

        GUI é a sigla para Graphical User Interface (ou Interface Gráfica para o Usuário). Vários ambientes
de desenvolvimento para SOs gráficos (VB, Delphi, Power Builder, etc.) são nativamente criados para o uso
com janelas gráficas. Em programação web também nos valemos de elementos gráficos. Porém, 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 ação.


Os Pacotes Gráficos de Java

         Em Java, diferentemente de outras linguagens e plataformas, existe mais de uma possibilidade de
uso de pacotes gráficos. Para entender melhor: se você criar um programa gráfico de janela no Delphi, por
exemplo, você vai usar os forms, buttons, labels e outros componentes gráficos disponíveis na VCL (Visual
Component Library – Biblioteca de Componentes Visuais) do Delphi. Embora seja possível haver outro
“grupo” de componentes gráficos no Delphi, na prática tudo funciona como se estivessem na VCL. Em Java,
no entanto, existe uma separação muito mais evidente entre os pacotes gráficos existentes. O pacote mais
básico 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 fácil de entender, vamos utilizá-lo para nossa primeira incursão no mundo gráfico de Java, até porque
                                                                       1
faremos as coisas “na mão” para entender realmente como funcionam . No período seguinte, veremos o
pacote SWING, mais completo e complexo, já em um ambiente gráfico.


                                            O Pacote AWT
        O pacote AWT contém as classes necessárias para a geração de componentes GUI, como
formulários, painéis, botões, caixas de texto, labels, etc.

Frames

       Frames são os “formulários” básicos do Java, instâncias da classe java.awt.Frame. Um frame
representa a própria janela, onde fica a barra de títulos e onde são colocados outros componentes. O frame
é o contêiner (componente que pode receber outros componentes sobre ele) natural do pacote AWT,
embora alguns outros componentes também possam ser conteiners (o panel, por exemplo).

        A posição dos componentes em um contêiner é determinada pelo tipo de layout escolhido, o que
pode afetar também 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 posição dos componentes dentro do contêiner em relação às suas
bordas, GridLayout – permite criar linhas e colunas para posicionar os componentes dentro do contêiner,
NullLayout – permite o posicionamento livre dos componentes.

        Alguns exemplos de métodos fundamentais dos frames: setLayout(...) - para definir o tipo de layout
usado, add() - para adicionar componentes (botões, caixas de texto, etc.) ao frame, setVisible(...) - para
tornar o frame visível.

Panels

       São conteiners mais simples que podem ser colocados sobre frames e também recebem outros
elementos como botões, labels, etc.



1       Nunca perca de vista o fato de Java ser uma linguagem de 3a. Geração, o que exige um maior grau de
entendimento do que acontece por dentro das soluções.
Outros Componentes Comuns do Pacote AWT

        Button – botão, Checkbox – caixa de marcação ligado/desligado, Label - linha de texto, TextField
– caixa de edição, TextArea – caixa de edição com várias linhas, List – caixa de listagem com vários itens.
Outros componentes também fazem parte do AWT, mas por ora vamos focar apenas nos mais comuns,
para entendermos como a coisa funciona.

Exemplos Gráficos Simples

                                Frame com 1 botão e dois layouts possíveis

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 não 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 números aleatórios)

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 também
    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 explicações 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 gráfico em Java, também existe mais de uma forma
de tratar eventos. A forma mais antiga prevê ações de forma mais simples e ainda pode ser usada quando a
complexidade for mínima (embora seja considerado ultrapassado - deprecated). O modelo mais atual se
vale de listeners (escutadores) de eventos. Mais profundidade nos eventos será vista no próximo período.


                    Exemplo com o modelo antigo de eventos (usando o método 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);
    }
}
                                                 Exercício

     1) crie um Label e escreva "clicou x vezes" no Label em vez do Button.


                          Exemplo com listeners de eventos e vários 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 métodos 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 título da janela
        form1.setVisible(true); // torna o form visível

        label1.setText("Alô, mundo!"); // seta o texto
        label1.setBounds(20,30,100,30); // define posição 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, então pudemos definir posições e tamanhos
livremente com o setBounds. O uso de layouts "na mão" é complexo e trabalhoso. Não é esse o nosso
objetivo aqui, queremos apenas entender como funciona o mecanismo Java para componentes gráficos e
eventos. Para desenhos mais elaborados, devemos usar ferramentas gráficas como o NetBeans.

       Obs2: preste atenção nos atributos definidos como “static”. Eles foram definidos assim para
poderem ser usados no “main” que é static também (caso contrário, não poderiam ser usados nele).


                                                   Exercícios

        1) Altere o exercício acima para escrever no Label o conteúdo do TextField.
        2) Altere o segundo exemplo (maior de dois números) para o usuário digitar os números e a resposta
           só vir depois de apertar um botão.

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:77
posted:4/28/2011
language:Portuguese
pages:4