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 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.
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 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.
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{ |
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);
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 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)
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 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
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]); } } } |
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.
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); } } } } |