page précédantetable des matièrespage suivante




La classe BorderLayout
    Exemple
La classe CardLayout
    Exemple
La classe FlowLayout
    Exemple
La classe GridLayout
    Exemple
La classe GridBagLayout
    Exemple
Null Layout
    Exemple
Un exemple
 
 

La classe BorderLayout

La classe BorderLayout pose des composants à "North", "South", "East" et "West" bord de conteneur ou bien dans le "Center". Le composant dans le centre prend toute la place non occupée par le "North", "South", "East" et "West" components. C'est le défaut "layout" pour Window, Frame, et Dialog objets.

Exemple  
 
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Border extends Applet {
    public void init(){
        setLayout(new BorderLayout());
        add("North", new Button("North"));
        add("South",new Button("South"));
        add("East",new Button("East"));
        add("West",new Button("West"));
        add("Center",new Button("Center"));
   }
}

Exemple II

import java.awt.*;
import java.awt.event.*;

public class Bl extends Applet {
    Panel p1, p2;
    String butLab[] = {"North-r","East-r","South-r","West-r","Center-r"};
    Button b[] = new Button[butLab.length];
    String bPos[] = { "North", "East", "South", "West", "Center" };
    Button b1[] = new Button[bPos.length];
    public void init() {
        setLayout(new BorderLayout());
        setSize(350,200);
        p1 = new Panel();
        p2 = new Panel(new BorderLayout());
        for (int i = 0; i < b.length; i++) {
            b[i] = new Button(butLab[i]);
            p1.add(b[i]);
            b[i].addActionListener(new B());
            b1[i]= new Button(bPos[i]);
            p2.add(bPos[i], b1[i]);
        }
        add("North",p1); add("Center",p2);
    }
    class B implements ActionListener{
        public void actionPerformed(ActionEvent e) {
            int i;
            String s=e.getActionCommand();
            for(i=0;i<b.length;i++)    {
                if(s.startsWith(bPos[i]))break;
            }
            if(s.endsWith("-r")){
                p2.remove(b1[i]);
                b[i].setLabel(bPos[i]+"-c");
                validate();
            }
            else {
                p2.add(bPos[i], b1[i]);
                b[i].setLabel(bPos[i]+"-r");
                validate();
            }
        }
    }
}

La classe CardLayout

La classe CardLayout pose des composants sous la forme d'une pile des cartes – à chaque instant seulement une carte est visible. On peut utiliser les méthodes "First","Last","Next","Previous" pour afficher les différents composant dans le conteneur.

Exemple
 
 
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Card extends Applet {
   CardLayout card;
   Panel panel;
   Button cd= new Button("   next button   ");
   boolean next = true;
   public void init(){
       card = new CardLayout();
       panel = new Panel();
       cd.addActionListener(new ChangeDirection());
       panel.setLayout(card);
       String cardButtons[] = {"First","Second","Third","Fourth","Last"};
       Button[] cb= new Button[cardButtons.length];
       for(int i=0;i<cardButtons.length;++i){
          panel.add("next button",cb[i]=new Button(cardButtons[i]));
          cb[i].addActionListener(new ButtonHandler());
       }
       add(panel);
       add(cd);
   }
   class ButtonHandler implements ActionListener {
       public void actionPerformed(ActionEvent ev){
           if(next) card.next(panel);
           else card.previous(panel);
       }
    }

    class ChangeDirection implements ActionListener{
         public void actionPerformed(ActionEvent ev) {
              next = !next;
              if (next) cd.setLabel("next button");
              else cd.setLabel("previous button");
        }
     }

La classe FlowLayout

La classe FlowLayout pose des composants de gauche à droite et de haut en bas. C'est le défaut "layout" pour "Panel" objets. Les constructeurs:
FlowLayout() –distance de 5 unités entre les composants,
FlowLayout(int align) – FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER;
FlowLayout(int align, int hgaps, int vgaps);

Exemple
 
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Flow extends Applet {
   public void init(){
       setLayout(new FlowLayout());
       String flowButtons[] = {"One","Two","Three","Four","Five"};
       for(int i=0;i<flowButtons.length;++i)
            add(new Button(flowButtons[i]));
    }
}

La classe GridLayout

La classe GridLayout pose les composant dans un réseau carré – tous les composants ont la même dimension. Les constructeur:
GridLayout(int rows, int cols)
GridLayout(int rows, int cols, int hgaps, int vgaps)

Exemple
 
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Grid extends Applet {
    public void init(){
         setLayout(new GridLayout(2,3));
         String gridButtons[] = {"(0,0)","(1,0)","(2,0)","(0,1)","(1,1)","(2,1)"};
         for(int i=0;i<gridButtons.length;++i)
              add(new Button(gridButtons[i]));
     }
}

La classe GridBagLayout

La classe GridBagLayout pose aussi les composants dans un réseau mais chaque composant peu occuper plus d'une ligne ou colon. On utilise la classe GridBagConstraints pour déterminer les paramètres de position de chaque composant

Exemple
 
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class GridBag extends Applet {
    GridBagLayout gridBagLayout = new GridBagLayout();
     public void init(){
         setLayout(gridBagLayout);
         Button gridBagButtons[] = new Button[9];
         for(int i=0;i<9;++i) gridBagButtons[i] = new Button("Button"+i);
         int gridx[] = {0,1,2,0,2,0,1,1,0};
         int gridy[] = {0,0,0,1,1,2,2,3,4};
         int gridwidth[] = {1,1,1,2,1,1,1,2,3};
         int gridheight[] = {1,1,1,1,2,2,1,1,1};
        GridBagConstraints gridBagConstraints[] = new GridBagConstraints[9];
        for(int i=0;i<9;++i) {
             gridBagConstraints[i] = new GridBagConstraints();
             gridBagConstraints[i].fill=GridBagConstraints.BOTH;
             gridBagConstraints[i].gridx=gridx[i];
             gridBagConstraints[i].gridy=gridy[i];
             gridBagConstraints[i].gridwidth=gridwidth[i];
             gridBagConstraints[i].gridheight=gridheight[i];
             gridBagLayout.setConstraints(gridBagButtons[i],gridBagConstraints[i]);
             add(gridBagButtons[i]);
         }
    }

Null Layout

Parfois on a besoin d'un layout spécial qui ne pourrait pas etre réalisé par les standarts layouts. Dans ce cas on peut donner des valeurs absolues pour poser des components. On utilise"null layout" et "setBounds(int x, int y, int largeur, int hauteur)" méthode pour definir position absolue, largeur et hauteur du component.

Exemple
 
import java.applet.*;
 import java.awt.*;
 public class abs_val extends Applet {
     Button buttonv = new Button("vert");
     Button button = new Button("Button at (10,80)");
     public void init() {
         setLayout(null);
         buttonv.setBounds(115,10,35,100);
         button.setBounds(10,80,100,30);
         add(buttonv);
         add(button);
     }
 }

Un exemple
 
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Layouts extends Applet {
     Panel[] panels;
     Panel currentPanel;
     static int border=0;
     static int card=1;
     static int flow=2;
     static int grid=3;
     static int gridBag=4;
     String[] layouts = {"Border","Card","Flow","Grid","GridBag"};
     String[] cards = {"First","Last","Next","Previous"};
     Button[] layoutButtons = new Button[layouts.length];
     Button[] navigateButtons = new Button[cards.length];
     Panel layoutButtonPanel = new Panel();
     Panel navigateButtonPanel = new Panel();
     public void init(){
         setLayout(new BorderLayout());
         setupButtons();
         add("North",layoutButtonPanel);
         setupDisplayPanels();
     }
     void setupButtons() {
         for(int i=0;i<layouts.length;++i) {
             layoutButtons[i] = new Button(layouts[i]);
             layoutButtons[i].addActionListener(new ButtonHandler());
             layoutButtonPanel.add(layoutButtons[i]);
         }
         for(int i=0;i<cards.length;++i) {
             navigateButtons[i] = new Button(cards[i]);
             navigateButtons[i].addActionListener(new ButtonHandler());
             navigateButtonPanel.add(navigateButtons[i]);
         }
     }
     void setupDisplayPanels() {
         panels = new Panel[5];
         for(int i=0;i<5;++i) panels[i]=new Panel();
         panels[border].setLayout(new BorderLayout());
         panels[card].setLayout(new CardLayout());
         panels[flow].setLayout(new FlowLayout());
         panels[grid].setLayout(new GridLayout(2,3));
         GridBagLayout gridBagLayout = new GridBagLayout();
         panels[gridBag].setLayout(gridBagLayout);
         panels[border].add("North",new Button("North"));
         panels[border].add("South",new Button("South"));
         panels[border].add("East",new Button("East"));
         panels[border].add("West",new Button("West"));
         panels[border].add("Center",new Button("Center"));
         String cardButtons[] = {"First","Second","Third","Fourth","Last"};
         String flowButtons[] = {"One","Two","Three","Four","Five"};
         String gridButtons[] = {"(0,0)","(1,0)","(2,0)","(0,1)","(1,1)","(2,1)"};
         for(int i=0;i<cardButtons.length;++i)
             panels[card].add("next card",new Button(cardButtons[i]));
         for(int i=0;i<flowButtons.length;++i)
             panels[flow].add(new Button(flowButtons[i]));
         for(int i=0;i<gridButtons.length;++i)
             panels[grid].add(new Button(gridButtons[i]));
         Button gridBagButtons[] = new Button[9];
         for(int i=0;i<9;++i) gridBagButtons[i] = new Button("Button"+i);
         int gridx[] = {0,1,2,0,2,0,1,1,0};
         int gridy[] = {0,0,0,1,1,2,2,3,4};
         int gridwidth[] = {1,1,1,2,1,1,1,2,3};
         int gridheight[] = {1,1,1,1,2,2,1,1,1};
         GridBagConstraints gridBagConstraints[] = new GridBagConstraints[9];
        for(int i=0;i<9;++i) {
             gridBagConstraints[i] = new GridBagConstraints();
             gridBagConstraints[i].fill=GridBagConstraints.BOTH;
             gridBagConstraints[i].gridx=gridx[i];
             gridBagConstraints[i].gridy=gridy[i];
             gridBagConstraints[i].gridwidth=gridwidth[i];
             gridBagConstraints[i].gridheight=gridheight[i];
             gridBagLayout.setConstraints(gridBagButtons[i],gridBagConstraints[i]);
             panels[gridBag].add(gridBagButtons[i]);
         }
         add("Center",panels[border]);
         currentPanel=panels[border];
     } 
    void switchPanels(Panel newPanel,boolean setNavigateButtons) {
        remove(currentPanel);
        currentPanel=newPanel;
        add("Center",currentPanel);
        remove(navigateButtonPanel);
        if(setNavigateButtons) add("South",navigateButtonPanel);
        validate();
    }
    class ButtonHandler implements ActionListener {
        public void actionPerformed(ActionEvent ev){
             String s=ev.getActionCommand();
             if(s.equals("Border")) switchPanels(panels[border],false);
             else if(s.equals("Card")) switchPanels(panels[card],true);
             else if(s.equals("Flow")) switchPanels(panels[flow],false);
             else if(s.equals("Grid")) switchPanels(panels[grid],false);
             else if(s.equals("GridBag")) switchPanels(panels[gridBag],false);
             else if(s.equals("First")){
                 CardLayout currentLayout=(CardLayout)currentPanel.getLayout();
                  currentLayout.first(currentPanel);
              }else if(s.equals("Last")){
                  CardLayout currentLayout=(CardLayout)currentPanel.getLayout();
                  currentLayout.last(currentPanel);
              }else if(s.equals("Next")){
                 CardLayout currentLayout=(CardLayout)currentPanel.getLayout();
                 currentLayout.next(currentPanel);
              }else if(s.equals("Previous")){
                 CardLayout currentLayout=(CardLayout)currentPanel.getLayout();
                  currentLayout.previous(currentPanel);
              }
          }
      }
}

 

page précédantetable des matièrespage suivante