在Swing中使用的所有布局管理器都可以实现LayoutManager接口。Swing中有五种常见的布局管理器分别为FlowLayout、BorderLayout、GridLayout、CardLayout、绝对定位。使用方法及常量可以查找JDK文档。
一:FlowLayout属于流式布局管理器,使用此种布局方式会使所有的组件想流水一样依次进行排序。
<span style="font-size:14px;">package org.cjl.demo18.layoutdemo; import java.awt.FlowLayout; import javax.swing.JButton;
import javax.swing.JFrame; public class FlowLayoutDemo01 {
public static void main(String[] args){
JFrame frame = new JFrame("welcome to mldn");
//设置窗体中的布局管理器为FlowLayout,所有组件居中对齐,水平和垂直距离为3.
frame.setLayout(new FlowLayout(FlowLayout.CENTER,3,3));
JButton but = null;
for(int i=0;i<9;i++){
but = new JButton("按钮 - "+i);
frame.add(but);//加入按钮 }
frame.setSize(280,130);
frame.setVisible(true);
}
}
</span>
显示的结果是
所有的组件按照顺序依次向下排列,每个组件之间的顺序是3.
二:BorderLayout是将一个窗体的版面划分为东、西、南、北、中区域,可以直接将需要的组件放到这区域中。
<span style="font-size:14px;">package org.cjl.demo18.layoutdemo; import java.awt.BorderLayout; import javax.swing.JButton;
import javax.swing.JFrame; public class BorderLayoutDemo01 {
public static void main(String[] args){
JFrame frame = new JFrame("Welocme to mldn");
//设置窗体中的布局管理器为BorderLayout,所有的组件水平和垂直间距为3
frame.setLayout(new BorderLayout(3,3));
frame.add(new JButton("东(EAST)"),BorderLayout.EAST);
frame.add(new JButton("西(WEST)"),BorderLayout.WEST);
frame.add(new JButton("南(SOUTH)"),BorderLayout.SOUTH);
frame.add(new JButton("北(NORTH)"),BorderLayout.NORTH);
frame.add(new JButton("中(CENTER)"),BorderLayout.CENTER); frame.pack(); //自动调整窗体大小
frame.setVisible(true);
}
}
</span>
三:GridLayout:是以表格的形式进行管理的,在使用此布局管理器时必须设置显示的行数
package org.cjl.demo18.layoutdemo; import java.awt.GridLayout; import javax.swing.JButton;
import javax.swing.JFrame; public class GridLayoutDemo01 {
public static void main(String[] args){
JFrame frame = new JFrame("welcome to mldn");
//设置窗体中的布局管理为GridLayout,按3X5进行排列,水平和垂直间距为3.
frame.setLayout(new GridLayout(3,5,3,3));
JButton but = null;
for(int i=0;i<13;i++){
but = new JButton("按钮 - "+i);
frame.add(but);
}
frame.pack();//根据组件自动调整窗体大小
frame.setVisible(true);
}
}
显示结果
四:CardLayout:是将一组组件彼此重,像卡片一样。
package org.cjl.demo18.layoutdemo; import java.awt.CardLayout;
import java.awt.Container; import javax.swing.JFrame;
import javax.swing.JLabel; public class CardLayoutDemo01 {
public static void main(String[] args){
JFrame frame = new JFrame("welcome to mldn");
Container cont = frame.getContentPane();//取得 窗体容器
CardLayout card = new CardLayout();
frame.setLayout(card);//设置布局管理器
cont.add(new JLabel("标签-A",JLabel.CENTER),"first");
cont.add(new JLabel("标签-B",JLabel.CENTER),"second");
cont.add(new JLabel("标签-C",JLabel.CENTER),"third");
cont.add(new JLabel("标签-D",JLabel.CENTER),"fourth");
cont.add(new JLabel("标签-E",JLabel.CENTER),"fifth");
frame.pack();//自动调整窗体大小 frame.setVisible(true);
card.show(cont, "fourth");
for(int i=0;i<5;i++){
try{
Thread.sleep(3000); //加入显示延迟
}catch(InterruptedException e){
e.printStackTrace();
}
card.next(cont);//从容器中取出组件 }
}
}