You are on page 1of 23

3/25/2017 TheSwinglayoutmanagement

Swinghasplentyoflayoutmanagersavailablebothbuiltinandthirdparty.However,mostofthe
managersarenotsuitableinmodernUIcreation.

Therearethreelayoutmanagersthatcandothejobproperly:

MigLayout
GroupLayout
FormLayout

MigLayout,GroupLayout,andFormLayoutarepowerful,flexiblelayoutmanagersthatcancopewith
mostlayoutrequirements.

Thefollowinglayoutmanagersareobsolete:

FlowLayout
GridLayout
CardLayout
BoxLayout
GridBagLayout

TheselayoutmanagersaresimplisticandtheycannotfulfillrequirementsforamodernUI.

Obsoletemanagers
Inthissection,wearegoingtocoverobsoletelayoutmanagers.Thesemanagersarenotrecommended
touse.Onlyputsometimetostudythemifweneedtomaintainsomelegacycode.Otherwise,their
usageshouldberejected.

FlowLayoutmanager
ThisisthesimplestlayoutmanagerintheJavaSwingtoolkit.Itisthedefaultlayoutmanagerfor
theJPanelcomponent.

Itissosimplethatitcannotbeusedforanyreallayout.ThismanageriscoveredinmanyJavaSwing
tutorialsandtherefore,beginnerstrytouseitintheirprojectsnotrealizingthatitcannotbeusedfor
anythingserious.

Whencalculatingitschildrensize,aflowlayoutletseachcomponentassumeitsnatural(preferred)
size.Themanagerputscomponentsintoarow.Intheorder,theywereadded.Iftheydonotfitinto
onerow,theygointothenextone.Thecomponentscanbeaddedfromtherighttotheleftorvice
versa.Themanagerallowstoalignthecomponents.Implicitly,thecomponentsarecenteredandthere
is5pxspaceamongcomponentsandcomponentsandtheedgesofthecontainer.

FlowLayout()
FlowLayout(intalign)
FlowLayout(intalign,inthgap,intvgap)

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 1/23
3/25/2017 TheSwinglayoutmanagement

TherearethreeconstructorsavailablefortheFlowLayoutmanager.Thefirstonecreatesamanager
withimplicitvalues.Centeredwith5pxhorizontalandverticalspaces.Theothersallowtospecify
thoseparameters.

FlowLayoutEx.java
packagecom.zetcode;

importjava.awt.Dimension;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.JTextArea;
importjavax.swing.JTree;
importjavax.swing.SwingUtilities;

publicclassFlowLayoutExextendsJFrame{

publicFlowLayoutEx(){

initUI();
}

privatevoidinitUI(){

JPanelpanel=newJPanel();

JButtonbutton=newJButton("button");
panel.add(button);

JTreetree=newJTree();
panel.add(tree);

JTextAreaarea=newJTextArea("textarea");
area.setPreferredSize(newDimension(100,100));

panel.add(area);

add(panel);

pack();

setTitle("FlowLayoutExample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(()>{
FlowLayoutExex=newFlowLayoutEx();
ex.setVisible(true);
});

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 2/23
3/25/2017 TheSwinglayoutmanagement

}
}

Theexampleshowsabutton,atreecomponent,andatextareacomponentinthewindow.Ifwecreate
anemptytreecomponent,therearesomedefaultvaluesinsidethecomponent.

JPanelpanel=newJPanel();

TheimplicitlayoutmanageroftheJPanelcomponentisaflowlayoutmanager.Wedonothavetoset
itmanually.

JTextAreaarea=newJTextArea("textarea");
area.setPreferredSize(newDimension(100,100));

Theflowlayoutmanagersetsapreferredsizeforitscomponents.Thismeans,thatinourcase,the
areacomponentwillhave100x100px.Ifwedidn'tsetthepreferredsize,thecomponentwouldhavea
sizeofitstext.Nomore,noless.Withoutthetext,thecomponentwouldnotbevisibleatall.Tryto
writeordeletesometextintheareacomponent.Thecomponentwillgrowandshrinkaccordingly.

panel.add(area);

Toputacomponentinsideacontainer,wesimplycalltheadd()method.

Figure:FlowLayout

GridLayout
TheGridLayoutlayoutmanagerlaysoutcomponentsinarectangulargrid.Thecontainerisdivided
intoequallysizedrectangles.Onecomponentisplacedineachrectangle.

GridLayoutisverysimpleandcannotbeusedforanyreallayout.

GridLayoutEx.java
packagecom.zetcode;

importjava.awt.GridLayout;
importjavax.swing.BorderFactory;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 3/23
3/25/2017 TheSwinglayoutmanagement

importjavax.swing.SwingUtilities;

publicclassGridLayoutExextendsJFrame{

publicGridLayoutEx(){

initUI();
}

privatevoidinitUI(){

JPanelpanel=newJPanel();

panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
panel.setLayout(newGridLayout(5,4,5,5));

String[]buttons={
"Cls","Bck","","Close","7","8","9","/","4",
"5","6","*","1","2","3","","0",".","=","+"
};

for(inti=0;i<buttons.length;i++){

if(i==2){
panel.add(newJLabel(buttons[i]));
}else{
panel.add(newJButton(buttons[i]));
}
}

add(panel);

setTitle("GridLayout");
setSize(350,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(()>{
GridLayoutExex=newGridLayoutEx();
ex.setVisible(true);
});
}
}

Theexampleshowsaskeletonofasimplecalculatortool.Weputnineteenbuttonsandonelabelinto
themanager.Noticethateachbuttonisofthesamesize.

panel.setLayout(newGridLayout(5,4,5,5));

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 4/23
3/25/2017 TheSwinglayoutmanagement

Herewesetthegridlayoutmanagerforthepanelcomponent.Thelayoutmanagertakesfour
parameters.Thenumberofrows,thenumberofcolumnsandthehorizontalandverticalgapsbetween
components.

Figure:GridLayout

BorderLayout
BorderLayoutisasimplelayoutmanagerthatcanbehandyincertainlayouts.Itisadefaultlayout
managerforJFrame,JWindow,JDialog,JInternalFrame,andJApplet.Ithasaseriouslimitiation
itsetsthegapsbetweenitschildreninpixels,thuscreatingrigidlayouts.Thisleadstononportable
UI,andtherefore,itsusageisnotrecommended.

BorderLayoutdividesthespaceintofiveregions:north,west,south,east,andcentre.Eachregion
canhaveonlyonecomponent.Ifweneedtoputmorecomponentsintoaregion,wehavetoputa
paneltherewithamanagerofourchoice.ThecomponentsinN,W,S,Eregionsget
theirpreferredsize.Thecomponentinthecentretakesupthewholespaceleft.

Itdoesnotlookgoodifchildcomponentsaretooclosetoeachother.Wemustputsomespaceamong
them.EachcomponentinSwingtoolkitcanhavebordersarounditsedges.Tocreateaborder,we
eithercreateanewinstanceofanEmptyBorderclassorweuseaBorderFactory.

BorderEx.java
packagecom.zetcode;

importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.Insets;

importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.SwingUtilities;
importjavax.swing.border.EmptyBorder;

publicclassBorderExextendsJFrame{

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 5/23
3/25/2017 TheSwinglayoutmanagement

publicBorderEx(){

initUI();
}

privatevoidinitUI(){

JPanelbottomPanel=newJPanel(newBorderLayout());
JPaneltopPanel=newJPanel();

topPanel.setBackground(Color.gray);
topPanel.setPreferredSize(newDimension(250,150));
bottomPanel.add(topPanel);

bottomPanel.setBorder(newEmptyBorder(newInsets(20,20,20,20)));

add(bottomPanel);

pack();

setTitle("BorderExample");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(()>{
BorderExex=newBorderEx();
ex.setVisible(true);
});
}
}

Theexamplewilldisplayagraypanelandborderaroundit.

JPanelbottomPanel=newJPanel(newBorderLayout());
JPaneltopPanel=newJPanel();

Weplaceapanelintoapanel.ThebottompanelhasaBorderLayoutmanager.

bottomPanel.add(topPanel);

Hereweplacedthetoppanelintothebottompanelcomponent.Moreprecisely,weplaceditintothe
centerareaofitsBorderLayoutmanager.

bottomPanel.setBorder(newEmptyBorder(newInsets(20,20,20,20)));

Herewecreateda20pxborderaroundthebottompanel.Thebordervaluesareasfollows:top,left,
bottomandright.Notethatcreatingfixedinsets(spaces)isnotportable.

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 6/23
3/25/2017 TheSwinglayoutmanagement

Figure:Borderexample

Thenextexamplewillshowatypicalusageofaborderlayoutmanager.

BorderLayoutEx.java
packagecom.zetcode;

importjava.awt.BorderLayout;
importjava.awt.Insets;

importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JTextArea;
importjavax.swing.JToolBar;
importjavax.swing.SwingUtilities;
importjavax.swing.border.EmptyBorder;

publicclassBorderLayoutExextendsJFrame{

publicBorderLayoutEx(){

initUI();
}

privatevoidinitUI(){

JMenuBarmenubar=newJMenuBar();
JMenufile=newJMenu("File");

menubar.add(file);
setJMenuBar(menubar);

JToolBartoolbar=newJToolBar();
toolbar.setFloatable(false);

ImageIconexit=newImageIcon("exit.png");
JButtonbexit=newJButton(exit);

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 7/23
3/25/2017 TheSwinglayoutmanagement

bexit.setBorder(newEmptyBorder(0,0,0,0));
toolbar.add(bexit);

add(toolbar,BorderLayout.NORTH);

JToolBarvertical=newJToolBar(JToolBar.VERTICAL);
vertical.setFloatable(false);
vertical.setMargin(newInsets(10,5,5,5));

ImageIcondriveIcon=newImageIcon("drive.png");
ImageIconcompIcon=newImageIcon("computer.png");
ImageIconprintIcon=newImageIcon("printer.png");

JButtondriveBtn=newJButton(driveIcon);
driveBtn.setBorder(newEmptyBorder(3,0,3,0));

JButtoncompBtn=newJButton(compIcon);
compBtn.setBorder(newEmptyBorder(3,0,3,0));
JButtonprintBtn=newJButton(printIcon);
printBtn.setBorder(newEmptyBorder(3,0,3,0));

vertical.add(driveBtn);
vertical.add(compBtn);
vertical.add(printBtn);

add(vertical,BorderLayout.WEST);

add(newJTextArea(),BorderLayout.CENTER);

JLabelstatusbar=newJLabel("Statusbar");
add(statusbar,BorderLayout.SOUTH);

setSize(400,350);
setTitle("BorderLayout");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(()>{
BorderLayoutExex=newBorderLayoutEx();
ex.setVisible(true);
});
}
}

Theexampleshowsatypicalapplicationskeleton.Weshowaverticalandhorizontaltoolbars,a
statusbar,andacentralcomponent(atextarea).

BorderLayoutisthedefaultlayoutmanagerfortheJFramecontainer.Sowedonothavetosetit
explicitly.

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 8/23
3/25/2017 TheSwinglayoutmanagement

add(toolbar,BorderLayout.NORTH);

Weplacethetoolbartothenorthofthelayout.

JButtondriveBtn=newJButton(driveIcon);
driveBtn.setBorder(newEmptyBorder(3,0,3,0));

Inordertoputsomeemptyspacearoundthebutton,wehavetouseEmptyBorder.Thisaddssome
fixedspacetothetopandbottomofthebutton.Whenweaddfixedspaces,theUIisnotportable.A
3pxspacemaylookOKona1280x720screenbutitisinappropriateona1920x1200pxscreen.

add(vertical,BorderLayout.WEST);

Weplacetheverticaltoobartothewest.

add(newJTextArea(),BorderLayout.CENTER);

Weplacethetextareaintothecenter.

add(statusbar,BorderLayout.SOUTH);

Thestatusbargoestothesoutharea.

Figure:BorderLayout

CardLayout
CardLayoutisasimplelayoutmanagerthattreatseachcomponentasacard.Thecontainerisastack
ofthesecards.Onlyonecomponentisvisibleatatimetherestishidden.Thefirstcomponentadded
tothecontainerisvisiblebydefaultwhenthecontainerisinitiallydisplayed.Thismanagerhasa
limitedpracticaluse.Itcanbeusedtocreateawizardoratabbedpane.

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 9/23
3/25/2017 TheSwinglayoutmanagement

ThefollowingexampleusesaCardLayoutmanagertocreateagalleryofimages.Weusefourimagesof
theKrasnaHorkacastle(beforethefirein2012).

CardLayoutEx.java
packagecom.zetcode;

importjava.awt.BorderLayout;
importjava.awt.CardLayout;
importjava.awt.Color;
importjava.awt.EventQueue;
importjava.awt.event.ActionEvent;
importjavax.swing.BorderFactory;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;

publicclassCardLayoutExextendsJFrame{

privateImageIconhorka1;
privateImageIconhorka2;
privateImageIconhorka3;
privateImageIconhorka4;
privateImageIconprevi;
privateImageIconnexti;

privateJPanelmainPanel;
privateCardLayoutlayout;

publicCardLayoutEx(){

initUI();
}

privatevoidinitUI(){

mainPanel=newJPanel();
mainPanel.setBackground(newColor(50,50,50));

mainPanel.setBorder(
BorderFactory.createEmptyBorder(5,5,5,5)
);

layout=newCardLayout();
mainPanel.setLayout(layout);

horka1=newImageIcon("horka1.jpg");
horka2=newImageIcon("horka2.jpg");
horka3=newImageIcon("horka3.jpg");
horka4=newImageIcon("horka4.jpg");

previ=newImageIcon("previous.png");

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 10/23
3/25/2017 TheSwinglayoutmanagement

nexti=newImageIcon("next.png");

JLabellabel1=newJLabel(horka1);
JLabellabel2=newJLabel(horka2);
JLabellabel3=newJLabel(horka3);
JLabellabel4=newJLabel(horka4);

mainPanel.add(label1);
mainPanel.add(label2);
mainPanel.add(label3);
mainPanel.add(label4);

add(mainPanel);

JButtonprevButton=newJButton(previ);
prevButton.addActionListener((ActionEvente)>{
layout.previous(mainPanel);
});

JButtonnextButton=newJButton(nexti);
nextButton.addActionListener((ActionEvente)>{
layout.next(mainPanel);
});

JPanelbtnPanel=newJPanel();
btnPanel.setBackground(newColor(50,50,50));
btnPanel.add(prevButton);
btnPanel.add(nextButton);

add(btnPanel,BorderLayout.SOUTH);

pack();

setTitle("Gallery");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

EventQueue.invokeLater(()>{
CardLayoutExex=newCardLayoutEx();
ex.setVisible(true);
});
}
}

Wecreatetwobuttonstonavigatethroughtheimages.

mainPanel=newJPanel();
mainPanel.setBackground(newColor(50,50,50));

mainPanel.setBorder(

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 11/23
3/25/2017 TheSwinglayoutmanagement

BorderFactory.createEmptyBorder(5,5,5,5)
);

Wecreatethemainpanelcomponent.Wesetitscolourtodarkgray.Weput5pxaroundthepanelso
thatitschildrenarenottooclosetotheborderofthewindow.

layout=newCardLayout();
mainPanel.setLayout(layout);

TheCardLayoutmanageriscreatedandsettothemainpanel.

mainPanel.add(label1);
mainPanel.add(label2);
mainPanel.add(label3);
mainPanel.add(label4);

Thelabelcomponentsdisplayingtheimagesareaddedtothepanel.

JButtonprevButton=newJButton(previ);
prevButton.addActionListener((ActionEvente)>{
layout.previous(mainPanel);
});

ClickingonthePreviousbuttontheprevious()methodofthemanageriscalled.Itflipstothe
previouscardofthespecifiedcontainer.

add(mainPanel);

Weaddthemainpaneltothecenterareaoftheborderlayoutoftheframecomponent.Ifwedonot
specifyexplicitlywhereweplacethecomponent,itisaddedtothecenterarea.

JPanelbtnPanel=newJPanel();
btnPanel.setBackground(newColor(50,50,50));
btnPanel.add(prevButton);
btnPanel.add(nextButton);

Thebuttonsareaddedtothebuttonpanel.

add(btnPanel,BorderLayout.SOUTH);

Finally,thepanelwiththebuttonsisplacedintothesouthareaoftheBorderLayoutmanager.

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 12/23
3/25/2017 TheSwinglayoutmanagement

Figure:CardLayout

BoxLayout
BoxLayoutmanagerisasimplelayoutmanagerthatorganizescomponentsinacolumnorarow.It
cancreatequitesophisticatedlayoutswithnesting.However,thisraisesthecomplexityofthelayout
creationandusesadditionalresources,notablymanyotherJPanelcomponents.BoxLayoutisonly
abletocreatefixedspacestherefore,itslayoutsarenotportable.

BoxLayouthasthefollowingconstructor:

BoxLayout(Containertarget,intaxis)

Theconstructorcreatesalayoutmanagerthatwilllayoutcomponentsalongthegivenaxis.Unlike
otherlayoutmanagers,BoxLayouttakesacontainerinstanceasthefirstparameterintheconstructor.
Thesecondparameterdeterminestheorientationofthemanager.Tocreateahorizontalbox,wecan
usetheLINE_AXISconstant.Tocreateaverticalbox,wecanusethePAGE_AXISconstant.

TheboxlayoutmanagerisoftenusedwiththeBoxclass.Thisclasscreatesseveralinvisible
components,whichaffectthefinallayout.

glue
strut
rigidarea

Let'ssaywewanttoputtwobuttonsintotherightbottomcornerofthewindow.

BoxLayoutButtonsEx.java
packagecom.zetcode;

importjava.awt.Dimension;

importjavax.swing.Box;
importjavax.swing.BoxLayout;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 13/23
3/25/2017 TheSwinglayoutmanagement

importjavax.swing.SwingUtilities;

publicclassBoxLayoutButtonsExextendsJFrame{

publicBoxLayoutButtonsEx(){

initUI();
}

privatevoidinitUI(){

JPanelbasic=newJPanel();
basic.setLayout(newBoxLayout(basic,BoxLayout.Y_AXIS));
add(basic);

basic.add(Box.createVerticalGlue());

JPanelbottom=newJPanel();
bottom.setAlignmentX(1f);
bottom.setLayout(newBoxLayout(bottom,BoxLayout.X_AXIS));

JButtonok=newJButton("OK");
JButtonclose=newJButton("Close");

bottom.add(ok);
bottom.add(Box.createRigidArea(newDimension(5,0)));
bottom.add(close);
bottom.add(Box.createRigidArea(newDimension(15,0)));

basic.add(bottom);
basic.add(Box.createRigidArea(newDimension(0,15)));

setTitle("TwoButtons");
setSize(300,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(()>{
BoxLayoutButtonsExex=newBoxLayoutButtonsEx();
ex.setVisible(true);
});
}
}

Thefollowingdrawingillustratestheexample.

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 14/23
3/25/2017 TheSwinglayoutmanagement

Figure:Twobuttons

Wecreatetwopanels.Thebasicpanelhasaverticalboxlayout.Thebottompanelhasahorizontal
one.Wewillputabottompanelintothebasicpanel.Werightalignthebottompanel.Thespace
betweenthetopofthewindowandthebottompanelisexpandable.Itisdonebytheverticalglue.

basic.setLayout(newBoxLayout(basic,BoxLayout.Y_AXIS));

HerewecreateabasicpanelwiththeverticalBoxLayout.

JPanelbottom=newJPanel();
bottom.setAlignmentX(1f);
bottom.setLayout(newBoxLayout(bottom,BoxLayout.X_AXIS));

Thebottompanelisrightaligned.ThisisdonebythesetAlignmentX()method.Thepanelhasa
horizontallayout.

bottom.add(Box.createRigidArea(newDimension(5,0)));

Weputsomerigidspacebetweenthebuttons.

basic.add(bottom);

Hereweputthebottompanelwithahorizontalboxlayouttotheverticalbasicpanel.

basic.add(Box.createRigidArea(newDimension(0,15)));

Wealsoputsomespacebetweenthebottompanelandtheborderofthewindow.

Figure:BoxLayoutbuttonsexample

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 15/23
3/25/2017 TheSwinglayoutmanagement

WhenweuseaBoxLayoutmanager,wecansetarigidareabetweenourcomponents.

BoxLayoutRigidAreaEx.java
packagecom.zetcode;

importjava.awt.Dimension;
importjava.awt.Insets;

importjavax.swing.Box;
importjavax.swing.BoxLayout;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.SwingUtilities;
importjavax.swing.border.EmptyBorder;

publicclassBoxLayoutRigidAreaExextendsJFrame{

publicBoxLayoutRigidAreaEx(){

initUI();
}

privatevoidinitUI(){

JPanelpanel=newJPanel();
panel.setLayout(newBoxLayout(panel,BoxLayout.Y_AXIS));

panel.setBorder(newEmptyBorder(newInsets(40,60,40,60)));

panel.add(newJButton("Button"));
panel.add(Box.createRigidArea(newDimension(0,5)));
panel.add(newJButton("Button"));
panel.add(Box.createRigidArea(newDimension(0,5)));
panel.add(newJButton("Button"));
panel.add(Box.createRigidArea(newDimension(0,5)));
panel.add(newJButton("Button"));

add(panel);

pack();

setTitle("RigidArea");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(()>{
BoxLayoutRigidAreaExex=newBoxLayoutRigidAreaEx();
ex.setVisible(true);
});

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 16/23
3/25/2017 TheSwinglayoutmanagement

}
}

Inthisexample,wedisplayfourbuttons.Bydefault,thereisnospacebetweenthebuttons.Toput
somespaceamongthem,weaddsomerigidarea.

panel.setLayout(newBoxLayout(panel,BoxLayout.Y_AXIS));

WeuseaverticalBoxLayoutmanagerforourpanel.

panel.add(newJButton("Button"));
panel.add(Box.createRigidArea(newDimension(0,5)));
panel.add(newJButton("Button"));

Weaddbuttonsandcreatearigidareainbetweenthem.

Figure:Rigidarea

TipoftheDay
JDeveloperhasadialogwindowcalledTipoftheDay.

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 17/23
3/25/2017 TheSwinglayoutmanagement

Figure:TipoftheDay

Wewillcreateasimilardialog.Wewilluseacombinationofvariouslayoutmanagers,namely,a
borderlayout,flowlayout,andboxlayoutmanager.

packagezetcode;

importjava.awt.BorderLayout;
importjava.awt.Color;
importjava.awt.Dimension;
importjava.awt.FlowLayout;
importjava.awt.event.KeyEvent;

importjavax.swing.BorderFactory;
importjavax.swing.BoxLayout;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JCheckBox;
importjavax.swing.JDialog;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JSeparator;
importjavax.swing.JTextPane;
importjavax.swing.SwingUtilities;

publicclassTipOfDayExampleextendsJDialog{

publicTipOfDayExample(){

initUI();

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 18/23
3/25/2017 TheSwinglayoutmanagement

publicfinalvoidinitUI(){

JPanelbasic=newJPanel();
basic.setLayout(newBoxLayout(basic,BoxLayout.Y_AXIS));
add(basic);

JPaneltopPanel=newJPanel(newBorderLayout(0,0));
topPanel.setMaximumSize(newDimension(450,0));
JLabelhint=newJLabel("JDeveloperProductivityHints");
hint.setBorder(BorderFactory.createEmptyBorder(0,25,0,0));
topPanel.add(hint);

ImageIconicon=newImageIcon("jdev.png");
JLabellabel=newJLabel(icon);
label.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
topPanel.add(label,BorderLayout.EAST);

JSeparatorseparator=newJSeparator();
separator.setForeground(Color.gray);

topPanel.add(separator,BorderLayout.SOUTH);

basic.add(topPanel);

JPaneltextPanel=newJPanel(newBorderLayout());
textPanel.setBorder(BorderFactory.createEmptyBorder(15,25,15,25));
JTextPanepane=newJTextPane();

pane.setContentType("text/html");
Stringtext="<p><b>Closingwindowsusingthemousewheel</b></p>"+
"<p>Clickingwiththemousewheelonaneditortabclosesthewindow."+
"ThismethodworksalsowithdockablewindowsorLogwindowtabs.</p>";
pane.setText(text);
pane.setEditable(false);
textPanel.add(pane);

basic.add(textPanel);

JPanelboxPanel=newJPanel(newFlowLayout(FlowLayout.LEFT,20,0));

JCheckBoxbox=newJCheckBox("ShowTipsatstartup");
box.setMnemonic(KeyEvent.VK_S);

boxPanel.add(box);
basic.add(boxPanel);

JPanelbottom=newJPanel(newFlowLayout(FlowLayout.RIGHT));

JButtonntip=newJButton("NextTip");
ntip.setMnemonic(KeyEvent.VK_N);
JButtonclose=newJButton("Close");
close.setMnemonic(KeyEvent.VK_C);
http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 19/23
3/25/2017 TheSwinglayoutmanagement

bottom.add(ntip);
bottom.add(close);
basic.add(bottom);

bottom.setMaximumSize(newDimension(450,0));

setTitle("TipoftheDay");
setSize(newDimension(450,350));
setResizable(false);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(newRunnable(){

publicvoidrun(){
TipOfDayExampleex=newTipOfDayExample();
ex.setVisible(true);
}
});
}
}

Theexampleusesamixoflayoutmanagers.Simplyweputfourpanelsintotheverticallyorganized
basicpanel.

JPanelbasic=newJPanel();
basic.setLayout(newBoxLayout(basic,BoxLayout.Y_AXIS));
add(basic);

Thisistheverybottompanel.Ithasaverticalboxlayoutmanager.Thebasicpanelisaddedtothe
defaultJDialogcomponent.Thiscomponenthasaborderlayoutmanagerbydefault.

JPaneltopPanel=newJPanel(newBorderLayout(0,0));

ThetopPanelpanelhasaborderlayoutmanager.Wewillputthreecomponentsintoit.Twolabelsand
aseparator.

topPanel.setMaximumSize(newDimension(450,0));

Ifwewanttohaveapanelthatisnotgreaterthanitscomponents,wemustsetitsmaximumsize.The
zerovalueisignored.Themanagercalculatesthenecessaryheights.

JPaneltextPanel=newJPanel(newBorderLayout());
...
textPanel.add(pane);

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 20/23
3/25/2017 TheSwinglayoutmanagement

Thetextpanecomponentisaddedtothecenterareaoftheborderlayoutmanager.Ittakesallspace
left.Exactly,aswewanted.

JPanelboxPanel=newJPanel(newFlowLayout(FlowLayout.LEFT,20,0));

ThecheckboxisshownintheboxPanelpanel.Itisleftaligned.Theflowlayoutmanagerhasa20px
horizontalgap.Othercomponentshave25px.Whyisthat?Itisbecausetheflowlayoutmanagerputs
somespacetobetweenthecomponentandtheedgeaswell.

JPanelbottom=newJPanel(newFlowLayout(FlowLayout.RIGHT));
...
bottom.setMaximumSize(newDimension(450,0));

Thebottompaneldisplaystwobuttons.Ithasarightalignedflowlayoutmanager.Inordertoshow
thebuttonsontherightedgeofthedialog,thepanelmuststretchhorizontallyfromthebeginningto
theend.

Figure:TipoftheDay

Nomanager
Itispossibletogowithoutalayoutmanager.Theremightbefewsituationswherewemightnotneeda
layoutmanager.(Maybepositioningafewimagesatsomeirregularlocations.)Butinmostcasesto
createtrulyportable,complexapplications,weneedlayoutmanagers.

Withoutlayoutmanager,wepositioncomponentsusingabsolutevalues.

AbsoluteLayoutEx.java
packagecom.zetcode;

importjavax.swing.JButton;

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 21/23
3/25/2017 TheSwinglayoutmanagement

importjavax.swing.JFrame;
importjavax.swing.SwingUtilities;

publicclassAbsoluteLayoutExextendsJFrame{

publicAbsoluteLayoutEx(){

initUI();
}

privatevoidinitUI(){

setLayout(null);

JButtonokBtn=newJButton("OK");
okBtn.setBounds(50,50,80,25);

JButtonclsBtn=newJButton("Close");
clsBtn.setBounds(150,50,80,25);

add(okBtn);
add(clsBtn);

setTitle("Absolutepositioning");
setSize(300,250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}

publicstaticvoidmain(String[]args){

SwingUtilities.invokeLater(()>{
AbsoluteLayoutExex=newAbsoluteLayoutEx();
ex.setVisible(true);
});
}
}

Thissimpleexampleshowstwobuttons.

setLayout(null);

WeuseabsolutepositioningbyprovidingnulltothesetLayout()method.(TheJFramecomponent
hasadefaultlayoutmanager,theBorderLayout.)

okBtn.setBounds(50,50,80,25);

ThesetBounds()methodpositionstheOkbutton.Theparametersarethexandycoordinatesand
thewidthandheightofthecomponent.

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 22/23
3/25/2017 TheSwinglayoutmanagement

Figure:Absolutelayout

http://zetcode.com/tutorials/javaswingtutorial/swinglayoutmanagement/ 23/23

You might also like