|
类层次结构:java.lang.Object
└javax.swing.BoxLayout 与前面几种布局不同的是 BoxLayout 是由 Swing 提供的布局管理器,功能上同 GridBagLayout 一样强大,而且更加易用。BoxLayout 将几个组件以水平或垂直的方式组合在一起,其中各个组件的大小随窗口的大小变化而变化。其实例变量如下:[li] ·X_AXIS BoxLayout 将以水平方式排列。 [li] ·Y_AXIS BoxLayout 将以垂直方式排列。 [/li]
要应用 BoxLayout,需要用到 Box 这个 Container,这个 Container 的 Layout 必须是BoxLayout。Box 类还提供了4个不可见组件来帮助实现版面管理,它们是Filler、Glue、Strut和Rigid。
普通的BoxLayout实例:
import java.awt.*;
import javax.swing.*;
public class NormalDemo extends JFrame{
public NormalDemo(){
Container contentPane=this.getContentPane();
Box box=new Box(BoxLayout.X_AXIS); //水平方式
contentPane.add(box);
box.add(new JButton("one"));
box.add(new JButton("two"));
this.setTitle("NormalDemo");
this.setSize(300,100);
this.setVisible(true);
}
public static void main(String args[]){
NormalDemo test=new NormalDemo();
}
}
运行效果如下图所示:
1. Filler
构造函数:Box.Filler(Dimension min,Dimension pref,Dimension max)
min 表示最小的显示区域大小;pref 表示最佳的显示区域大小;max表示最大的显示区域大小。当窗口大小被拖动时,组件间的距离不会超过最小值和最大值。
FillerBoxLayout实例:
import java.awt.*;
import javax.swing.*;
public class FillerBoxLayoutDemo extends JFrame{
public FillerBoxLayoutDemo(){
Container contentPane=this.getContentPane();
Box box=new Box(BoxLayout.X_AXIS);
contentPane.add(box);
box.add(new JButton("one"));
box.add(new Box.Filler(new Dimension(100,100),new Dimension(200,100),new Dimension(300,300)));
box.add(new JButton("two"));
this.setTitle("FillerBoxLayoutDemo");
this.setSize(500,100);
this.setVisible(true);
}
public static void main(String args[]){
FillerBoxLayoutDemo test=new FillerBoxLayoutDemo();
}
}
运行效果如下图所示:
2. Glue
当Glue插入组件之间时,它会将组件挤到窗口的最边缘。
GlueBoxLayout实例:
import java.awt.*;
import javax.swing.*;
public class GlueBoxLayoutDemo extends JFrame{
public GlueBoxLayoutDemo(){
Container contentPane=this.getContentPane();
Box box=new Box(BoxLayout.X_AXIS);
contentPane.add(box);
box.add(new JButton("one"));
box.add(Box.createGlue()); //可以插入水平或垂直的Glue
box.add(new JButton("two"));
this.setTitle("GlueBoxLayoutDemo");
this.setSize(200,100);
this.setVisible(true);
}
public static void main(String args[]){
GlueBoxLayoutDemo test=new GlueBoxLayoutDemo();
}
}
运行效果如下图所示:
3. Strut
精确设定组件间的距离(水平/垂直)
StrutBoxLayout实例:
import java.awt.*;
import javax.swing.*;
public class StrutBoxLayoutDemo extends JFrame{
public StrutBoxLayoutDemo(){
Container contentPane=this.getContentPane();
Box box=new Box(BoxLayout.X_AXIS);
contentPane.add(box);
box.add(new JButton("one"));
box.add(Box.createHorizontalStrut(50));
box.add(new JButton("two"));
this.setTitle("StrutBoxLayoutDemo");
this.setSize(300,100);
this.setVisible(true);
}
public static void main(String args[]){
StrutBoxLayoutDemo test=new StrutBoxLayoutDemo();
}
}
运行效果如下图所示:
4. Rigid
与Strut相似,也是限制组件间的距离,不过rigid是二维的,即水平和垂直的宽度。
RigidBoxLayout实例:
import java.awt.*;
import javax.swing.*;
public class RigidBoxLayoutDemo extends JFrame{
public RigidBoxLayoutDemo(){
Container contentPane=this.getContentPane();
Box box=new Box(BoxLayout.X_AXIS);
contentPane.add(box);
box.add(new JButton("one"));
box.add(Box.createRigidArea(new Dimension(80,150)));
box.add(new JButton("two"));
this.setTitle("RigidBoxLayoutDemo");
this.pack();
this.setVisible(true);
}
public static void main(String args[]){
RigidBoxLayoutDemo test=new RigidBoxLayoutDemo();
}
}
运行效果如下图所示:
|
|