table des matières

Класът BorderLayout
    Пример
Класът CardLayout
    Пример
Класът FlowLayout
    Пример
Класът GridLayout
    Пример
Класът GridBagLayout
    Пример
Null Layout
    Пример
Пример
 
 Разполагането на компонетите се управлява от специални класове - Layout :

Класът BorderLayout

Класът BorderLayout поставя компонентите на северната, южната, източната или западната граница на контейнера ("North", "South", "East" и "West") или пък в центъра му ( "Center"). Компонетът в центъра взима цялото място, незаето от "North", "South", "East" или "West" компоинента. Това е подразбирашият се  "layout" за Window, Frame, и Dialog обекти.

Пример 
 
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"));
   }
}

Класът  CardLayout

Класът CardLayout поставя компонентите под формата на тесте от карти - във всеки момент само един компонент е видим. За изобразяването на различни компоненти се използват методите "First","Last","Next" и "Previous".

Пример
 
 
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");
        }
     }
}

Класът FlowLayout

Класът FlowLayout разполага компонентите от ляво на дясно и от горе на долу. Това е подразбирашият се "layout" за обекти от тип "Panel". Конструкторите на класа са:

FlowLayout() –разстояние 5 единици между компонентите,
FlowLayout(int align) – FlowLayout.LEFT, FlowLayout.RIGHT, FlowLayout.CENTER;
FlowLayout(int align, int hgaps, int vgaps);

Пример
 
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]));
    }
}

Класът GridLayout

Класът GridLayout поставя компонентите под формата на правоъгълна мрежа, като всички компоненти имат еднакъв размер. Използва конструкторите:
GridLayout(int rows, int cols)
GridLayout(int rows, int cols, int hgaps, int vgaps)

Пример
 
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]));
     }
}

Класът GridBagLayout

Класът GridBagLayout също поставя компонентитеpose в правоъгълна решетка, но всеки компонент може да заема повеч от една линия или колона. Класът  GridBagConstraints се използва за определяне на параметрите на всеки компонент.

Пример
 
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]);
         }
    }
}

 
със:
gridBagConstraints[i].fill=GridBagConstraints.NONE;

Null Layout

Понякога е необходимо специално разполагане на компонента, което не може да бъде реализирано със стандартните класове. В този случай може да се задават абсолютни стойности за позиция и рамер. Използва се "null layout" и "setBounds(int x, int y, int ширина, int височина)" метод.

Пример
 
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);
     }
 }

Пример
 
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);
              }
          }
      }
}
Layout


 


 
 

table des matières