Класът BorderLayout
Пример
Класът
CardLayout
Пример
Класът FlowLayout
Пример
Класът
GridLayout
Пример
Класът
GridBagLayout
Пример
Null Layout
Пример
Пример
Разполагането
на
компонетите
се управлява
от специални
класове - Layout :
Класът 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 поставя компонентите под формата на тесте от карти - във всеки момент само един компонент е видим. За изобразяването на различни компоненти се използват методите "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{ |
Класът 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(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 също поставя компонентите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" и "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); } } } }
|