TA345/531 TP257 Informática Aplicada à Engenharia de Alimentos.


Nos exemplos vistos até agora não usamos a ferramenta de diagramação, porém, a linguagem Java oferece sempre, como default, o método de Layout mais simples (FlowLayout). Nesse método, os objetos são colocados um após o outro assim que forem adicionados.

Para problemas simples essa forma de programação gráfica resolve. Porém, temos que estudar a arte da diagramação para melhorar a estética dos nossos Applets.

 

Aula 05: Parte D – Gerenciadores de Layout (Diagramação)

 

As classes conhecidas como gerenciadores de layout servem para especificar como os componentes devem ser posicionados em um container. Layout pode ser definido como uma máscara que é colocada sobre um container para definir como os seus componentes serão adicionados.

 

MÉTODOS COMUNS A TODOS OS COMPONENTES

void resize(int width, int height) → tamanho do componente

void move(int x, nt y) → mover componente

void setForeground(Color x) → cor do componente

void setBackground(Color y) → cor de fundo do componente

void disable( )→ desabilitando componente

void enable( ) → habilitando componente

 

VARIÁVEIS DE COR DEFINIDAS NO JAVA

black  

Preto

blue

Azul

cyan   

Cyan

darkGray

Cinza escuro

gray

Cinza

green

Verde

lightGray

Cinza claro

magenta

Magenta 

orange

Laranja

pink

Rosa

red

Vermelho

white

Branco

yellow

amarelo

 

Apresentaremos a seguir os tipos de layout propostos pela linguagem:

 

Flow Layout:

Esse é um gerenciador de layout baseado em fluxo. Isso significa dizer que os objetos são adicionados da esquerda para a direita e, em seguida, centralizados, na ordem em que são adicionados ao container. Quando uma “linha” de objetos esgota o espaço disponível, uma nova linha de objetos é iniciada pelo gerenciador.

 

Exemplo 1 de FlowLayout:

import java.applet.Applet;

import java.awt.*;

 

/*

<APPLET

CODE=flow.class

WIDTH=200

HEIGHT=200 >

</APPLET>

*/

 

public class flow extends Applet

{

            TextField text1, text2, text3;

            public void init( )

            {

                        setLayout(new FlowLayout(FlowLayout.RIGHT));

                        text1 = new TextField(10); add(text1);

                        text2 = new TextField(10); add(text2);

                        text3 = new TextField(10); add(text3);

            }

}

 

 

Exemplo 2 de FlowLayout:

import java.applet.Applet;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class operador extends Applet implements ActionListener
{
    Label titulo, rotulo1, rotulo2, rotulo3, aviso;
    TextField caixa1, caixa2, caixa3;
    Button botaoSoma, botaoMultiplica, botaoLimpa;
    double num1, num2, soma, produto;
    public void init()
    {
        titulo = new Label("Operações com números reais: ");
        add(titulo);
        rotulo1 = new Label("Forneça o primeiro número: ");
        caixa1 = new TextField("3",5);
        add(rotulo1); add(caixa1);
        rotulo2 = new Label("Forneça o segundo número: ");
        caixa2 = new TextField("2",5);
        add(rotulo2); add(caixa2);
        botaoSoma = new Button("+");
        add(botaoSoma);
        botaoSoma.addActionListener(this);
        botaoMultiplica = new Button("*");
        add(botaoMultiplica);
        botaoMultiplica.addActionListener(this);
        rotulo3 = new Label("Resultado: ");
        caixa3 = new TextField("        ",5);
        add(rotulo3); add(caixa3);
        botaoLimpa = new Button("Limpa");
                               add(botaoLimpa);
        botaoLimpa.addActionListener(this);
        aviso = new Label("Use ponto e não virgula");
        add(aviso);
    }
    public void actionPerformed(ActionEvent e)
    {
               if (e.getSource() == botaoSoma)
        {
           num1=Double.valueOf(caixa1.getText()).doubleValue();
           //num1=Double.parseDouble(caixa1.getText()); (outra alternativa)
           num2=Double.valueOf(caixa2.getText()).doubleValue();
           soma=num1+num2;
           caixa3.setText(String.valueOf(soma));
        }
        if (e.getSource() == botaoMultiplica)
                               {
                                  num1=Double.valueOf(caixa1.getText()).doubleValue();
                                  num2=Double.valueOf(caixa2.getText()).doubleValue();
                                  produto=num1*num2;
                                  caixa3.setText(String.valueOf(produto));
        }
        if (e.getSource() == botaoLimpa)
                   {
                       caixa1.setText("0");
                       caixa2.setText("0");
                       caixa3.setText("");
        }
    }
}
 

 

Border Layout:

BorderLayout é o gerenciador de layout padrão. De acordo com esse gerenciador, o container pode ser visto como uma área dividida em cinco regiões distintas: Norte, Sul, Leste, Oeste e Centro. Em cada uma dessas áreas pode ser inserido um objeto. Cada um dos objetos inseridos pode ser, por sua vez, um novo container, que suportará seu próprio layout específico. Essa estrutura de organização de objetos é suficiente, na maioria dos casos, para produzir janelas de aspecto agradável e de manuseio eficiente.

 

Exemplo 1 de BorderLayout:

import java.awt.*;

import java.applet.Applet;

public class ex5_7 extends Applet

{

Button botãol, botão2, botão3, botão4, botão5;

public void init ( )

{

setLayout(new BorderLayout( ));

botão1 = new Button(“Norte”);

botão2 = new Button(“Sul”);

botão3 = new Button(“Leste”);

botão4 = new Button(“Oeste”);

botão5 = new Button(“Centro”);

add(“North”,botão1);

add(“South”,botão2);

add(“East”,botão3);

add(“West”,botão4);

add(“Center”,botão5);

}

}

 

 

Exemplo 2 de BorderLayout:

import java.awt.*;

import java.applet.Applet;

 

public class ex5_7b extends Applet

{

    Button botao1, botao2, botao3, botao4;

    Button botao5, botao6, botao7, botao8;

    Button botao9, botao10, botao11, botao12, botao13;

    Panel panel1, panel2;

 

    public void init ( )

    {

        setLayout(new BorderLayout( ));

        botao1 = new Button("Norte 1");

        botao2 = new Button("Sul 1");

        botao3 = new Button("Leste 1");

        botao4 = new Button("Oeste 1");

 

        botao5 = new Button("Norte 2");

        botao6 = new Button("Sul 2");

        botao7 = new Button("Leste 2");

        botao8 = new Button("Oeste 2");

 

        botao9 = new Button("Centro");

        botao10 = new Button("Norte 3");

        botao11 = new Button("Sul 3");

        botao12 = new Button("Leste 3");

        botao13 = new Button("Oeste 3");

 

        panel1 = new Panel();

        panel1.setLayout(new BorderLayout( ));

        panel2 = new Panel();

        panel2.setLayout(new BorderLayout( ));

 

        add("North",botao1);

        add("South",botao2);

        add("East",botao3);

        add("West",botao4);

 

        add("Center",panel1);

        panel1.add("North",botao5);

        panel1.add("South",botao6);

        panel1.add("East",botao7);

        panel1.add("West",botao8);

 

 

        panel1.add("Center",panel2);

        panel2.add("Center",botao9);

        panel2.add("North",botao10);

        panel2.add("South",botao11);

        panel2.add("East",botao12);

        panel2.add("West",botao13);

    }

}

 

 

Exemplo 3 de BorderLayout:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class caixa extends Applet
{
     Panel p1,p2,p3,p4;
     Button bt=new Button("Botão");
     Checkbox cb1=new Checkbox("Checkbox");
     Choice ch=new Choice();
     List lt=new List(5,true);
     TextField tf=new TextField(5);
     CheckboxGroup cbg=new CheckboxGroup();
     Checkbox[] cb2=new Checkbox[5];
     public void init()
    {
      setLayout(new BorderLayout(5,5));
      p1=new Panel();
      add("North",p1);
      p1.add(cb2[0]=new Checkbox("uva",cbg,true));
      p1.add(cb2[1]=new Checkbox("banana",cbg,false));
      p1.add(cb2[2]=new Checkbox("maçã",cbg,false));
      p1.add(cb2[3]=new Checkbox("laranja",cbg,false));
      p1.add(cb2[4]=new Checkbox("mamão",cbg,false));
      p1.setBackground(Color.red);
      p2=new Panel();
      add("West",p2);
      p2.add(bt);
      p2.add(cb1);
      p2.setBackground(Color.green);
      p3=new Panel();
      add("East",p3);
      ch.addItem("papel higiênico");
      ch.addItem("sabonete");
      ch.addItem("shampoo");
      ch.addItem("condicionador");
      ch.addItem("creme para barbear");
      p3.add(ch);
      lt.add("pratos");
      lt.add("talheres");
      lt.add("copos");
      lt.add("guardanapo");
      lt.add("panelas");
      p3.add(lt);
      p3.setBackground(Color.blue);
      p4=new Panel();
      add("Center",p4);
      p4.add(tf);
      p4.setBackground(Color.yellow);
      tf.setBackground(Color.white);
 
    }
}//fim do Applet
 
 

Exemplo 4 de BorderLayout:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class caixa extends Applet
{
     Panel p1,p2,p3,p4;
     Button bt=new Button("Botão");
     Checkbox cb1=new Checkbox("Checkbox");
     Choice ch=new Choice();
     List lt=new List(5,true);
     TextField tf=new TextField(5);
     CheckboxGroup cbg=new CheckboxGroup();
     Checkbox[] cb2=new Checkbox[5];
     public void init()
    {
      setLayout(new BorderLayout(5,5));
      p1=new Panel();
      add("West",p1);
      p1.add(cb2[0]=new Checkbox("uva",cbg,true));
      p1.add(cb2[1]=new Checkbox("banana",cbg,false));
      p1.add(cb2[2]=new Checkbox("maçã",cbg,false));
      p1.add(cb2[3]=new Checkbox("laranja",cbg,false));
      p1.add(cb2[4]=new Checkbox("mamão",cbg,false));
      p1.setBackground(Color.red);
      p2=new Panel();
      add("Center",p2);
      p2.add(bt);
      p2.add(cb1);
      p2.setBackground(Color.green);
      p3=new Panel();
      add("North",p3);
      ch.addItem("papel higiênico");
      ch.addItem("sabonete");
      ch.addItem("shampoo");
      ch.addItem("condicionador");
      ch.addItem("creme para barbear");
      p3.add(ch);
      lt.add("pratos");
      lt.add("talheres");
      lt.add("copos");
      lt.add("guardanapo");
      lt.add("panelas");
      p3.add(lt);
      p3.setBackground(Color.blue);
      p4=new Panel();
      add("East",p4);
      p4.add(tf);
      p4.setBackground(Color.yellow);
      tf.setBackground(Color.white);
 
    }
}//fim do Applet
 
 
Grid Layout:
Como o nome sugere, esse gerenciador define um layout em forma de grade, com o número de linhas necessárias para conter os objetos. O detalhe é que os objetos serão sempre do mesmo tamanho e se ajustarão automaticamente a qualquer variação no tamanho da janela.
Utilizar esse gerenciador deve ser eficiente em projetos de interface que necessitam, por exemplo de dois painéis que precisam manter sempre o mesmo tamanho.
 
Exemplo 1 de GridLayout:
import java.applet.*;
import java.awt.*;
import java.text.*;
import java.awt.event.*;
// <APPLET CODE = "custo.class" WIDTH=1000 HEIGHT=600></APPLET>
 
public class custo extends Applet implements ActionListener
    {
         NumberFormat nf1 = NumberFormat.getNumberInstance();
         Button button = new Button("Cálculo");
         //n1 Ingrediente 1
         TextField tf11 = new TextField("0");
         TextField tf12 = new TextField("0");
         TextField tf13 = new TextField("0");
         //n2 Ingrediente 2
         TextField tf21 = new TextField("0");
         TextField tf22 = new TextField("0");
         TextField tf23 = new TextField("0");
         //n3 Ingrediente 3
         TextField tf31 = new TextField("0");
         TextField tf32 = new TextField("0");
         TextField tf33 = new TextField("0");
         //n4 Ingrediente 4
         TextField tf41 = new TextField("0");
         TextField tf42 = new TextField("0");
         TextField tf43 = new TextField("0");
         //n5 Ingrediente 5
         TextField tf51 = new TextField("0");
         TextField tf52 = new TextField("0");
         TextField tf53 = new TextField("0");
         //n6 Ingrediente 6
        TextField tf61 = new TextField("0");
        TextField tf62 = new TextField("0");
        TextField tf63 = new TextField("0");
        //nd Soma final
        TextField tf71 = new TextField("Composição total");
        TextField tf72 = new TextField("Avisos!");
        TextField tf73 = new TextField("Preço final");
        double n101,n201,n301,n401,n501,n601,nd01,
                    n102,n202,n302,n402,n502,n602,nd02,
                    n103,n203,n303,n403,n503,n603,nd03;
         public void init()
        {
              setLayout(new GridLayout(5,9));
              nf1.setMaximumFractionDigits(2);
             tf71.setEditable(false);
              tf72.setEditable(false);
              tf73.setEditable(false);
              tf13.setEditable(false);
              tf23.setEditable(false);
              tf33.setEditable(false);
              tf43.setEditable(false);
              tf53.setEditable(false);
              tf63.setEditable(false);
              add(new Label("",Label.CENTER));
              add(new Label("",Label.CENTER));
              add(new Label("Ingrediente 1",Label.CENTER));
              add(new Label("Ingrediente 2",Label.CENTER));
              add(new Label("Ingrediente 3",Label.CENTER));
              add(new Label("Ingrediente 4",Label.CENTER));
              add(new Label("Ingrediente 5",Label.CENTER));
              add(new Label("Ingrediente 6",Label.CENTER));
              add(new Label("Soma Final",Label.CENTER));
              add(new Label("Composição (%)",Label.LEFT));
              add(new Label("",Label.LEFT));
              add(tf11);add(tf21);add(tf31);add(tf41);
              add(tf51);add(tf61);add(tf71);
              add(new Label("Preço por Kg",Label.LEFT));
              add(new Label("",Label.LEFT));
              add(tf12);add(tf22);add(tf32);add(tf42);
              add(tf52);add(tf62);add(tf72);
              add(new Label("Ponderação",Label.LEFT));
              add(new Label("",Label.LEFT));
              add(tf13);add(tf23);add(tf33);add(tf43);
              add(tf53);add(tf63);add(tf73);
              add(new Label()); add(new Label()); add(new Label());
              add(new Label()); add(new Label());
              add(button); button.addActionListener(this);
              add(new Label()); add(new Label()); add(new Label());
        }
         public void actionPerformed(ActionEvent evt)
         {
              if (evt.getSource() == button)
              {
                   //Composição
                  n101 = Double.valueOf(tf11.getText()).doubleValue();//Ingrediente 1
                   n201 = Double.valueOf(tf21.getText()).doubleValue();//Ingrediente 2
                   n301 = Double.valueOf(tf31.getText()).doubleValue();//Ingrediente 3
                   n401 = Double.valueOf(tf41.getText()).doubleValue();//Ingrediente 4
                   n501 = Double.valueOf(tf51.getText()).doubleValue();//Ingrediente 5
                   n601 = Double.valueOf(tf61.getText()).doubleValue();//Ingrediente 6
                   //Preço por Kg de ingrediente
                   n102 = Double.valueOf(tf12.getText()).doubleValue();//Ingrediente 1
                   n202 = Double.valueOf(tf22.getText()).doubleValue();//Ingrediente 2
                   n302 = Double.valueOf(tf32.getText()).doubleValue();//Ingrediente 3
                   n402 = Double.valueOf(tf42.getText()).doubleValue();//Ingrediente 4
                   n502 = Double.valueOf(tf52.getText()).doubleValue();//Ingrediente 5
                   n602 = Double.valueOf(tf62.getText()).doubleValue();//Ingrediente 6
                   //Ponderação
                   n103 = n101 * n102/100;//Ingrediente 1
                   n203 = n201 * n202/100;//Ingrediente 2
                   n303 = n301 * n302/100;//Ingrediente 3
                   n403 = n401 * n402/100;//Ingrediente 4
                   n503 = n501 * n502/100;//Ingrediente 5
                   n603 = n601 * n602/100;//Ingrediente 6
                   // cálculos
                   nd01 = n101 + n201 + n301 + n401 + n501 + n601;
                   nd03 = n103 + n203 + n303 + n403 + n503 + n603;
                   // coloca numeros como texto na caixa do resultado
                   tf71.setText(String.valueOf(nf1.format(nd01)));
                   tf73.setText(String.valueOf(nf1.format(nd03)));
                   tf13.setText(String.valueOf(nf1.format(n103)));
                   tf23.setText(String.valueOf(nf1.format(n203)));
                   tf33.setText(String.valueOf(nf1.format(n303)));
                   tf43.setText(String.valueOf(nf1.format(n403)));
                   tf53.setText(String.valueOf(nf1.format(n503)));
                   tf63.setText(String.valueOf(nf1.format(n603)));
                   if (nd01 == 100)
                   {
                                 tf72.setText("Comp. correta");
                            }
                                           else
                                           {
                                           tf72.setText("Comp. errada!!!!!");
                                           }
                            }
              }
            }
 
 
Exemplo 2 de GridLayout:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

 

/*

<APPLET

CODE=multiplicadora2.class

WIDTH=200

HEIGHT=200 >

</APPLET>

*/

 

public class multiplicadora2 extends Applet implements ActionListener

{

            TextField text1, text2, text3;

            Label multiplylabel;

            Button button1;

 

            public void init( )

            {

                        setLayout (new GridLayout (5, 1) ) ;

                        text1 = new TextField(10); add(text1);

                        multiplylabel = new Label("*", Label.CENTER); add (multiplylabel);

                        text2 = new TextField(10); add(text2);

                        button1 = new Button("="); add(button1);

                        button1.addActionListener(this);

                        text3 = new TextField(10); add(text3);

            }

            public void actionPerformed(ActionEvent e)

            {

                        if(e.getSource( ) == button1)

                        {

                                   int product = Integer.parseInt(text1.getText( )) *

                                   Integer.parseInt(text2.getText());

                                   text3. setText (String.valueOf (product));

                        }

            }

}

 

 
GridBag Layout:
GridBagLayout, a exemplo do gerenciador GridLayout, também organiza objetos em uma grade. Entretanto, trata-se de um gerenciador muito mais flexível, poderoso e complexo, permitindo alinhar objetos vertical e horizontalmente, sem impor que todos os objetos tenham o mesmo tamanho.
 
Exemplo de GridBagLayout:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

 

/*

<APPLET

CODE=gridbag.class

WIDTH=400

HEIGHT=80 >

</APPLET>

*/

 

public class gridbag extends Applet implements ActionListener

{

            Button button1, button2, button3;

            TextField text1;

            public void init( )

            {

                        GridBagLayout gridbag = new GridBagLayout( );

                        GridBagConstraints constraints = new GridBagConstraints( );

                        setLayout (gridbag);

 

                        constraints.weighty = 1;

                        constraints.fill = GridBagConstraints.BOTH;

                        constraints.weightx = 1;

                        button1 = new Button ("Botão 1");

                        gridbag.setConstraints (button1, constraints);

                        button1.setActionCommand("Botão 1"); add(button1);

                        button1.addActionListener(this);

 

                        constraints.weightx = 2;

                        button2 = new Button("Botão 2");

                        gridbag.setConstraints(button2, constraints);

                        button2.setActionCommand("Botão 2"); add(button2);

                        button2.addActionListener(this);

 

                        constraints.weightx = 1;

                        button3 = new Button("Botão 3");

                        constraints.gridwidth = GridBagConstraints.REMAINDER;

                        gridbag.setConstraints(button3, constraints);

                        button3.setActionCommand("Botão 3");add(button3);

                        button3.addActionListener(this);

 

                        text1 = new TextField( );

                        constraints.gridwidth = GridBagConstraints.REMAINDER;

                        gridbag.setConstraints (text1, constraints); add(text1);

            }

            public void actionPerformed(ActionEvent e)

            {

                        text1.setText ("Você clicou no " +

                        ((Button) e.getSource( )).getActionCommand( ));

            }

}

 

 
Card Layout:
O gerenciador CardLayout permite empilhar objetos como se fossem cartas de um baralho. Como resultado do empilhamento, apenas o objeto que está na parte superior da pilha fica visível na tela. É óbvio que métodos disponibilizados pelo gerenciador tornam possível colocar qualquer carta do baralho na parte superior da pilha, em determinado momento.
 
Exemplo de CardLayout:

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

 

/*

<APPLET

CODE=card.class

WIDTH=200

HEIGHT=200 >

</APPLET>

*/

 

class cardPainel extends card

{

            Button button;

            Label label;

 

            cardPainel(card applet, String cardnumber)

            {

                        button = new Button("Cartão seguinte");

                        button.addActionListener(applet); add(button);

                        label = new Label("Este é o cartão nº " + cardnumber);add(label);

            }

}

 

public class card extends Applet implements ActionListener

{

            int index = 1;

            CardLayout cardlayout;

            cardPainel painel1, painel2, painel3;

 

            public void init( )

            {

                        cardlayout = new CardLayout( );

                        setLayout(cardlayout);

                        painel1 = new cardPainel (this, "um");   add("primeiro", painel1);

                        painel2 = new cardPainel (this, "dois"); add("segundo",  painel2);

                        painel3 = new cardPainel (this, "três"); add("terceiro", painel3);

                        cardlayout.show(this, "primeiro");

            }

 

            public void actionPerformed(ActionEvent event)

            {

                        switch(++index)

                        {

                                   case 1: cardlayout.show(this, "primeiro"); break;

                                   case 2: cardlayout.show(this, "segundo");  break;

                                   case 3: cardlayout.show(this, "terceiro"); break;

                        }

                        if (index == 3) index = 0;

                        repaint( );

    }

}

 

 

 Até a Próxima! 


Volta para a pagina principal

 

Última atualização:  06/abril/2006