“Java界面布局”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
(创建页面,内容为“在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,即大小、位置和排列方式,我…”)
 
第1行: 第1行:
 
在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,即大小、位置和排列方式,我们就需要使用布局管理器。将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。在Java中,布局由布局管理器 (LayoutManager) 来管理。Java提供了一组用来进行布局管理的类,常见的布局管理器包括 FlowLayout、CardLayout、GridLayout、BorderLayout、BoxLayout 、GridBagLayout 等。
 
在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,即大小、位置和排列方式,我们就需要使用布局管理器。将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。在Java中,布局由布局管理器 (LayoutManager) 来管理。Java提供了一组用来进行布局管理的类,常见的布局管理器包括 FlowLayout、CardLayout、GridLayout、BorderLayout、BoxLayout 、GridBagLayout 等。
1.FlowLayout
+
 
 +
==流布局(FlowLayout)==
 
类FlowLayout是流布局管理器。这种管理器的特点是,组件在容器内依照指定方向按照组件添加的顺序依次加入到容器中。这个指定方向取决于FlowLayout管理器的组件方向属性。该属性有两种可能:从左到右方向和从右向左方向。在默认情况下,这个指定方向是从左到右的。
 
类FlowLayout是流布局管理器。这种管理器的特点是,组件在容器内依照指定方向按照组件添加的顺序依次加入到容器中。这个指定方向取决于FlowLayout管理器的组件方向属性。该属性有两种可能:从左到右方向和从右向左方向。在默认情况下,这个指定方向是从左到右的。
1)创建流布局。
+
===创建流布局===
 
下面是流布局BorderLayout所定义的构造函数:
 
下面是流布局BorderLayout所定义的构造函数:
FlowLayout():创建一个流布局管理器,居中对齐,默认的水平和垂直间隙是 5 个单位。  
+
*FlowLayout():创建一个流布局管理器,居中对齐,默认的水平和垂直间隙是 5 个单位。  
FlowLayout(int align):创建一个指定对齐方式的流布局管理器,默认的水平和垂直间隙是 5 个单位。 具体的对齐方式有居中对齐、左向对齐、右向对齐、容器开始的方向对齐(LEADING)以及容器结束的方向对齐(TRAILING)。
+
*FlowLayout(int align):创建一个指定对齐方式的流布局管理器,align指代对齐方式,具体的对齐方式有居中对齐、左向对齐、右向对齐、容器开始的方向对齐(LEADING)以及容器结束的方向对齐(TRAILING)。默认的水平和垂直间隙是 5 个单位。  
FlowLayout(int align, int hgap, int vgap):创建一个流布局管理器,具有指定的对齐方式以及指定的水平和垂直间隙。
+
*FlowLayout(int align, int hgap, int vgap):创建一个流布局管理器,align指代对齐方式,hgap指代水平间隙,vgap指代竖直间隙。
2)FlowLayout的常用方法。
+
===FlowLayout的常用方法===
 
FlowLayout的常用方法见表4-3。
 
FlowLayout的常用方法见表4-3。
表4-3 FlowLayout的主要方法
+
 
方    法 功    能
+
<nowiki>方    法 功    能
 
int getAlignment() 获取对齐方式
 
int getAlignment() 获取对齐方式
 
void setAlignment(int) 设置对齐方式
 
void setAlignment(int) 设置对齐方式
 
void setHgap(int)   设置组件水平间隔
 
void setHgap(int)   设置组件水平间隔
void setVgap()   设置组件垂直间隔
+
void setVgap()   设置组件垂直间隔</nowiki>
 +
 
 
例如,下面程序演示了FlowLayout布局
 
例如,下面程序演示了FlowLayout布局
public class TestFlowrLayout extends JFrame{
+
 
 +
<nowiki>public class TestFlowrLayout extends JFrame{
 
public TestFlowrLayout() {
 
public TestFlowrLayout() {
 
super("FLowLayout布局演示");
 
super("FLowLayout布局演示");
    JPanel panel=new JPanel();
+
        JPanel panel=new JPanel();
    for(int i=0;i<6;i++) {
+
        for(int i=0;i<6;i++) {
    panel.add(new JButton("按钮"+i));
+
        panel.add(new JButton("按钮"+i));
    }      
+
        }      
 
this.getContentPane().add(panel);
 
this.getContentPane().add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(350,100);
+
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 +
                setSize(350,100);
 
setVisible(true); }
 
setVisible(true); }
 
public static void main(String[] args) {
 
public static void main(String[] args) {
 
TestFlowrLayout userInfo=new TestFlowrLayout();
 
TestFlowrLayout userInfo=new TestFlowrLayout();
 
}
 
}
}
+
}</nowiki>
 
程序运行结果如下图所示:
 
程序运行结果如下图所示:
  
2.BorderLayout。
+
==边界布局(BorderLayout)==
 
边界布局BorderLayout是窗口、框架和对话框等的缺省布局。组件可被置于容器的北(上)、南(下)、东(右)、西(左)或中间位置。它可以对容器组件进行安排,并调整其大小,使其符合上述五个区域,每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST 和 CENTER。当使用边界布局将一个组件添加到容器中时,要使用这五个常量之一。NORTH 和 SOUTH 组件可以在水平方向上进行拉伸;而 EAST 和 WEST 组件可以在垂直方向上进行拉伸;CENTER 组件在水平和垂直方向上都可以进行拉伸,从而填充所有剩余空间。
 
边界布局BorderLayout是窗口、框架和对话框等的缺省布局。组件可被置于容器的北(上)、南(下)、东(右)、西(左)或中间位置。它可以对容器组件进行安排,并调整其大小,使其符合上述五个区域,每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST 和 CENTER。当使用边界布局将一个组件添加到容器中时,要使用这五个常量之一。NORTH 和 SOUTH 组件可以在水平方向上进行拉伸;而 EAST 和 WEST 组件可以在垂直方向上进行拉伸;CENTER 组件在水平和垂直方向上都可以进行拉伸,从而填充所有剩余空间。
1)创建边界布局
+
===创建边界布局===
 
下面是BorderLayout所定义的构造函数:
 
下面是BorderLayout所定义的构造函数:
BorderLayout( ):生成默认的边界布局
+
*BorderLayout( ):生成默认的边界布局
BorderLayout(int horz,int vert): 可以设定组件间的水平和垂直距离
+
*BorderLayout(int horz,int vert): 可以设定组件间的水平和垂直距离
 +
 
 
BorderLayout 类定义了几个常量值以指定相应区域:  
 
BorderLayout 类定义了几个常量值以指定相应区域:  
BorderLayout.NORTH – 对应容器的顶部
+
*BorderLayout.NORTH – 对应容器的顶部
BorderLayout.EAST – 对应容器的右部
+
*BorderLayout.EAST – 对应容器的右部
BorderLayout.SOUTH – 对应容器的底部
+
*BorderLayout.SOUTH – 对应容器的底部
BorderLayout.WEST – 对应容器的左部
+
*BorderLayout.WEST – 对应容器的左部
BorderLayout.CENTER – 对应容器的中部
+
*BorderLayout.CENTER – 对应容器的中部
2)添加组件
+
===添加组件===
 
加入组件方法是 void add(Component Obj, int region)。
 
加入组件方法是 void add(Component Obj, int region)。
 +
 
下面代码段可实现如图所示的运行效果。
 
下面代码段可实现如图所示的运行效果。
public class TestBorderLayout extends JFrame{
+
 
 +
<nowiki>public class TestBorderLayout extends JFrame{
 
public TestBorderLayout() {
 
public TestBorderLayout() {
 
super("边界布局演示");
 
super("边界布局演示");
 
setLayout(new BorderLayout());
 
setLayout(new BorderLayout());
    JButton btnEast=new JButton("东");
+
                JPanel borderPanel=new JPanel();//1.创建一个面板
    JButton btnWest=new JButton("西");
+
        JButton btnEast=new JButton("东");
    JButton btnNorth=new JButton("北");
+
        JButton btnWest=new JButton("西");
    JButton btnSouth=new JButton("南");
+
        JButton btnNorth=new JButton("北");
    JButton btnCenter=new JButton("中");
+
        JButton btnSouth=new JButton("南");
    JPanel borderPanel=new JPanel();
+
        JButton btnCenter=new JButton("中");
    borderPanel.setLayout(new BorderLayout());//设置布局方式
+
     
    borderPanel.add(btnEast,BorderLayout.EAST);
+
        borderPanel.setLayout(new BorderLayout());//2.设置布局方式
    borderPanel.add(btnWest,BorderLayout.WEST);
+
        borderPanel.add(btnEast,BorderLayout.EAST);//3.将组件依次添加到面板中
    borderPanel.add(btnNorth,BorderLayout.NORTH);
+
        borderPanel.add(btnWest,BorderLayout.WEST);
    borderPanel.add(btnSouth,BorderLayout.SOUTH);
+
        borderPanel.add(btnNorth,BorderLayout.NORTH);
    borderPanel.add(btnCenter,BorderLayout.CENTER);
+
        borderPanel.add(btnSouth,BorderLayout.SOUTH);
 +
        borderPanel.add(btnCenter,BorderLayout.CENTER);
  
this.getContentPane().add(borderPanel);
+
this.getContentPane().add(borderPanel);//4.将面板添加到框架中
 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭时操作
 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭时操作
 
setSize(220,200);
 
setSize(220,200);
第72行: 第80行:
 
TestBorderLayout userInfo=new TestBorderLayout();
 
TestBorderLayout userInfo=new TestBorderLayout();
 
}
 
}
}
+
}</nowiki>
  
 
当窗口缩放时,组件的位置不发生变化,但组件的大小会相应改变。边界布局管理器给予南、北组件最佳高度,使它们与容器一样宽;给予东、西组件最佳宽度,而高度受到限制。如果窗口水平缩放,南、北、中区域变化;如果窗口垂直缩放,东、西、中区域变化。BorderLayout是窗口( JWindow)、框架(JFrame)、对话框(JDialog)等类型对象的默认布局。
 
当窗口缩放时,组件的位置不发生变化,但组件的大小会相应改变。边界布局管理器给予南、北组件最佳高度,使它们与容器一样宽;给予东、西组件最佳宽度,而高度受到限制。如果窗口水平缩放,南、北、中区域变化;如果窗口垂直缩放,东、西、中区域变化。BorderLayout是窗口( JWindow)、框架(JFrame)、对话框(JDialog)等类型对象的默认布局。
3.GridLayout
+
 
 +
==GridLayout==
 
网格布局是一种常用的布局方式,将容器的区域划分成矩形网格,每个矩形大小规格一致,组件可以放置在其中的一个矩形中。通过java.awt.GridLayout类创建网格布局管理器对象,实现对容器中的各组件的网格布局排列。具体的排列方向取决于容器的组件方向属性,组件方向属性有两种:从左向右和从右向左。用户可以根据实际要求进行设定方向属性,默认的方向是从右向左。
 
网格布局是一种常用的布局方式,将容器的区域划分成矩形网格,每个矩形大小规格一致,组件可以放置在其中的一个矩形中。通过java.awt.GridLayout类创建网格布局管理器对象,实现对容器中的各组件的网格布局排列。具体的排列方向取决于容器的组件方向属性,组件方向属性有两种:从左向右和从右向左。用户可以根据实际要求进行设定方向属性,默认的方向是从右向左。
1)创建网格布局
+
===创建网格布局===
 
GridLayout的构造方法如下:
 
GridLayout的构造方法如下:
GridLayout():创建默认的网格布局。每一个组件占据一行一列。
+
*GridLayout():创建默认的网格布局。每一个组件占据一行一列。
GridLayout(int rows,int columns):创建指定行数和列数的网格布局。
+
*GridLayout(int rows,int columns):创建指定行数和列数的网格布局。
GridLayout(int rows,int columns, int hgap,int vgap):创建指定行数和列数的网格布局,并且指定水平间隔和垂直间隔的大小。
+
*GridLayout(int rows,int columns, int hgap,int vgap):创建指定行数和列数的网格布局,并且指定水平间隔和垂直间隔的大小。
2)GridLayout的常见方法
+
===GridLayout的常见方法===
 
GridLayout的常见方法见表。
 
GridLayout的常见方法见表。
表GridLayout的主要方法
+
<nowiki>方    法 功    能
方    法 功    能
 
 
int getRows() 获取行数
 
int getRows() 获取行数
 
void setRows(int) 设置行数
 
void setRows(int) 设置行数
第93行: 第101行:
 
void setHgap(int)   设置组件水平间隔
 
void setHgap(int)   设置组件水平间隔
 
int getVgap()   获取组件垂直间隔
 
int getVgap()   获取组件垂直间隔
void setVgap()   设置组件垂直间隔
+
void setVgap()   设置组件垂直间隔</nowiki>
 +
 
 
例如,下面一段代码演示了网格布局:
 
例如,下面一段代码演示了网格布局:
public class TestGridLayout extends JFrame{
+
<nowiki>public class TestGridLayout extends JFrame{
 
public TestGridLayout() {
 
public TestGridLayout() {
 
super("GridLayout布局演示");
 
super("GridLayout布局演示");
第111行: 第120行:
 
TestGridLayout grid=new TestGridLayout();
 
TestGridLayout grid=new TestGridLayout();
 
}
 
}
}
+
}</nowiki>
 
程序运行结果如下图所示:
 
程序运行结果如下图所示:
  
 
图 网格布局
 
图 网格布局

2018年5月21日 (一) 14:03的版本

在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。为了管理好这些组件的布局,即大小、位置和排列方式,我们就需要使用布局管理器。将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。在Java中,布局由布局管理器 (LayoutManager) 来管理。Java提供了一组用来进行布局管理的类,常见的布局管理器包括 FlowLayout、CardLayout、GridLayout、BorderLayout、BoxLayout 、GridBagLayout 等。

流布局(FlowLayout)

类FlowLayout是流布局管理器。这种管理器的特点是,组件在容器内依照指定方向按照组件添加的顺序依次加入到容器中。这个指定方向取决于FlowLayout管理器的组件方向属性。该属性有两种可能:从左到右方向和从右向左方向。在默认情况下,这个指定方向是从左到右的。

创建流布局

下面是流布局BorderLayout所定义的构造函数:

  • FlowLayout():创建一个流布局管理器,居中对齐,默认的水平和垂直间隙是 5 个单位。
  • FlowLayout(int align):创建一个指定对齐方式的流布局管理器,align指代对齐方式,具体的对齐方式有居中对齐、左向对齐、右向对齐、容器开始的方向对齐(LEADING)以及容器结束的方向对齐(TRAILING)。默认的水平和垂直间隙是 5 个单位。
  • FlowLayout(int align, int hgap, int vgap):创建一个流布局管理器,align指代对齐方式,hgap指代水平间隙,vgap指代竖直间隙。

FlowLayout的常用方法

FlowLayout的常用方法见表4-3。

方    法	功    能
int getAlignment()	获取对齐方式
void setAlignment(int)	设置对齐方式
void setHgap(int)	  设置组件水平间隔
void setVgap()	  设置组件垂直间隔

例如,下面程序演示了FlowLayout布局

public class TestFlowrLayout extends JFrame{
	public TestFlowrLayout() {
		super("FLowLayout布局演示");
	        JPanel panel=new JPanel();
	        for(int i=0;i<6;i++) {
	    	    panel.add(new JButton("按钮"+i));
	        }	    
		this.getContentPane().add(panel);
	        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
                setSize(350,100);
		setVisible(true);	}
	public static void main(String[] args) {
		TestFlowrLayout userInfo=new TestFlowrLayout();
	}
}

程序运行结果如下图所示:

边界布局(BorderLayout)

边界布局BorderLayout是窗口、框架和对话框等的缺省布局。组件可被置于容器的北(上)、南(下)、东(右)、西(左)或中间位置。它可以对容器组件进行安排,并调整其大小,使其符合上述五个区域,每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST 和 CENTER。当使用边界布局将一个组件添加到容器中时,要使用这五个常量之一。NORTH 和 SOUTH 组件可以在水平方向上进行拉伸;而 EAST 和 WEST 组件可以在垂直方向上进行拉伸;CENTER 组件在水平和垂直方向上都可以进行拉伸,从而填充所有剩余空间。

创建边界布局

下面是BorderLayout所定义的构造函数:

  • BorderLayout( ):生成默认的边界布局
  • BorderLayout(int horz,int vert): 可以设定组件间的水平和垂直距离

BorderLayout 类定义了几个常量值以指定相应区域:

  • BorderLayout.NORTH – 对应容器的顶部
  • BorderLayout.EAST – 对应容器的右部
  • BorderLayout.SOUTH – 对应容器的底部
  • BorderLayout.WEST – 对应容器的左部
  • BorderLayout.CENTER – 对应容器的中部

添加组件

加入组件方法是 void add(Component Obj, int region)。

下面代码段可实现如图所示的运行效果。

public class TestBorderLayout extends JFrame{
	public TestBorderLayout() {
		super("边界布局演示");
		setLayout(new BorderLayout());
                JPanel borderPanel=new JPanel();//1.创建一个面板
	        JButton btnEast=new JButton("东");
	        JButton btnWest=new JButton("西");
	        JButton btnNorth=new JButton("北");
	        JButton btnSouth=new JButton("南");
	        JButton btnCenter=new JButton("中");
	    
	        borderPanel.setLayout(new BorderLayout());//2.设置布局方式
	        borderPanel.add(btnEast,BorderLayout.EAST);//3.将组件依次添加到面板中
	        borderPanel.add(btnWest,BorderLayout.WEST);
	        borderPanel.add(btnNorth,BorderLayout.NORTH);
	        borderPanel.add(btnSouth,BorderLayout.SOUTH);
	        borderPanel.add(btnCenter,BorderLayout.CENTER);

		this.getContentPane().add(borderPanel);//4.将面板添加到框架中
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭时操作
		setSize(220,200);
		setVisible(true);//设置窗口可见性
	}
	public static void main(String[] args) {
		TestBorderLayout userInfo=new TestBorderLayout();
	}
}

当窗口缩放时,组件的位置不发生变化,但组件的大小会相应改变。边界布局管理器给予南、北组件最佳高度,使它们与容器一样宽;给予东、西组件最佳宽度,而高度受到限制。如果窗口水平缩放,南、北、中区域变化;如果窗口垂直缩放,东、西、中区域变化。BorderLayout是窗口( JWindow)、框架(JFrame)、对话框(JDialog)等类型对象的默认布局。

GridLayout

网格布局是一种常用的布局方式,将容器的区域划分成矩形网格,每个矩形大小规格一致,组件可以放置在其中的一个矩形中。通过java.awt.GridLayout类创建网格布局管理器对象,实现对容器中的各组件的网格布局排列。具体的排列方向取决于容器的组件方向属性,组件方向属性有两种:从左向右和从右向左。用户可以根据实际要求进行设定方向属性,默认的方向是从右向左。

创建网格布局

GridLayout的构造方法如下:

  • GridLayout():创建默认的网格布局。每一个组件占据一行一列。
  • GridLayout(int rows,int columns):创建指定行数和列数的网格布局。
  • GridLayout(int rows,int columns, int hgap,int vgap):创建指定行数和列数的网格布局,并且指定水平间隔和垂直间隔的大小。

GridLayout的常见方法

GridLayout的常见方法见表。

方    法	功    能
int getRows()	获取行数
void setRows(int)	设置行数
int getColumns()	获取列数
void setColumns(int)	设置列数
int getHgap()	  获取组件水平间隔
void setHgap(int)	  设置组件水平间隔
int getVgap()	  获取组件垂直间隔
void setVgap()	  设置组件垂直间隔

例如,下面一段代码演示了网格布局:

public class TestGridLayout extends JFrame{
	public TestGridLayout() {
		super("GridLayout布局演示");
		String[] str={"1","2","3","4","5","6","7","8","9"};
	    JPanel gridPanel=new JPanel();
	    gridPanel.setLayout(new GridLayout(3,3));//设置布局方式
	    for(int i=0;i<str.length;i++)
	    	gridPanel.add(new JButton(str[i]));
		this.getContentPane().add(gridPanel);
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭时操作
		setVisible(true);//设置窗口可见性
	}
	public static void main(String[] args) {
		TestGridLayout grid=new TestGridLayout();
	}
}

程序运行结果如下图所示:

图 网格布局