`

BoxLayout的使用

 
阅读更多
BoxLayout的类层次结构图:
java.lang.Object
     --java.awt.BoxLayout

BoxLayout提供了两个常数X_AXIS,Y_AXIS来表示水平或垂直排列。若放进去的组件不等高,则系统将会使所有的组件与最高组件 等高,还有,若你将组件都摆在同一行时,系统不因组件宽度在于Container的宽度,而使组件自动摆在下一行,你必须自行处理换 行的操作。

构造函数:

BoxLayout(Container targe,int axis)建立一个水平或垂直的BoxLayout.

讲到BoxLayout,我们就不得不提到Box这个Container,Box这个Container默认的Layout为BoxLayout,而它只能使用这个Layout, 否则编译时会有Error产生,如同前面所讲的,BoxLayout是以水平或垂直方式排列,因此,当我们要产生一个Box Container时, 就必须指定它的排列方式,下面为Box的构造函数:

Box(int axis) 建立一个Box Container,并指定组件的排列方式是水平或垂直。

上面的axis参数,我们可以使用BoxLayout.X_AXIS或BoxLayout.Y_AXIS来指定。或是利用Box类所提供的两个方法:

createHorizontalBox()与createVerticalBox(),来建立BoxContainer.

Box类提供4种透明的组件来做更方便的版面管理。分别是glue、strut、rigid、filler:

下面以两个相连的按钮当例子,起始状态如下:

B1.java
     1  import java.awt.*;
     2  import java.awt.event.*;
     3  import javax.swing.*;
     4  public class B1{
     5    public B1(){
     6        JFrame f=new JFrame();
     
     7          Container contentPane=f.getContentPane();
     8          Box baseBox=Box.createHorizontalBox();
     9          contentPane.add(baseBox);
     10         baseBox.add(new JButton("A"));
     11         baseBox.add(new JButton("B"));
     
     12         f.setTitle("BoxLayout");
     13         f.setSize(new Dimension(200,50));
     14         f.setVisible(true);
     
     15         f.addWindowListener(
     16              new WindowAdapter(){
     17                  public void windowClosing(WindowEvent e){
     18                     System.exit(0);	
     19                  }	
     20              }	
     21         );
     
     22     }	
     public static void main(String[] args){
     B1 b=new B1();
     }
     }

Glue:当glue插入在两组件间时,它会将两组件挤到最左与最右(或最上与最下),透明的glue将会占满整个中间的空间。

例:

在10与11行间加入下面一行程序:

baseBox.add(Box.createHorizontalGlue());

Strut:当你不想将A与B按钮挤到最旁边时,你可以使用Strut组件,来设置所需要的大小,但仅能限定一维的大小,例如限定 水平或垂直高度。

例:在10与11行间加入下面一行程序:

baseBox.add(Box.createHorizontalStrut(50));//A,B之间间隔50个像素。

Rigid:这个透明组件跟Strut很像,但它可以设置二维的限制,也就是可以设置水平与垂直的限制宽度。

例:在10与11行间加入下面一行程序:

baseBox.add(Box.createRigidArea(new Dimension(50,50)));

为了将Rigid的高度功能显示出来,因此以pack()方法代替setSize()方法,11行替换为:f.pack();

若我们将高度再拉长,例如baseBox.add(Box.createRigidArea(new Dimension(50,50)));的Dimension改成(50,100),则两 组件的上下空白将会增大,因为透明的Rigid组件高度增高了。

Filler:Filler是Box的inner class,它的功能跟Rigid很像,都可以指定长宽的大小限制,且Filler可以指定最大、较佳、最小的长 宽大小,以下是Filler的构造函数:

Box.Filler(Dimension min,Dimension pref Dimension max)建立一个指定大小的Filler对象。

参数min表示最小的显示区域大小,如同上面的例子所示,若所设置最小区域的高度大于按钮A与B的高度,则按钮A与B的上方 与下方将有空白出现。

pref表示较佳的显示区域大小。max表示最大的显示区域大小。

例:在10与11行间加入下面一行程序:

baseBox.add(new Box.Filler(new Dimension(50,50),
     new Dimension(100,50),
     new Dimension(200,50)));

Box类所提供的方法:

     Static Component       createGlue()构造一个Glue组件可向水平与垂直方向延伸
     Static Box             createHorizontalBox()构造一个水平排列的Box组件
     Static Component       createHorizontalGlue()构造一个水平的Glue组件
     Static Component       createHorizontalStrut(int width)构造一个水平的Strut组件
     Static Component       createRigidArea(Dimension d)构造一个Rigid组件
     Static Box             createVerticalBox()构造一个垂直排列的Box组件
     Static Component       createVerticalGlue()构造一个垂直的Glue组件
     Static Component       createVerticalStrut(int height)构造一个垂直的Strut组件
     AccessibleContext      getAccessibleContext()取得与JComponent相关边的AccessibleContext
     Void                   setLayout(LayoutManager l)丢出AWTError,因为Box只能使用BoxLayout

例子:BoxLayoutDemo.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BoxLayoutDemo {
	public BoxLayoutDemo() {
		JFrame f = new JFrame();

		Container contentPane = f.getContentPane();
		Box baseBox = Box.createHorizontalBox();// 先产生水平排列方式的Box组件,当作基底容器(BaseBox)
		contentPane.add(baseBox);

		/*
		 * 产生垂直排列方式的Box组件来安置第一与第三个按钮
		 */
		Box vBox = Box.createVerticalBox();
		JButton b = new JButton("first");
		vBox.add(b);
		b = new JButton("third");
		b.setMaximumSize(new Dimension(100, 150));
		vBox.add(b);
		baseBox.add(vBox);

		/*
		 * 产生垂直排列方式的Box组件来安置第二与另一个水平排列方式的Box组件
		 */
		Box vBox1 = Box.createVerticalBox();
		baseBox.add(vBox1);
		b = new JButton("second");
		b.setAlignmentX(Component.CENTER_ALIGNMENT);
		b.setMaximumSize(new Dimension(300, 50));
		vBox1.add(b);

		Box hBox = Box.createHorizontalBox();
		vBox1.add(hBox);

		/*
		 * 将第四与最后一个按钮加入水平排列方式的Box组件中
		 */
		Box vBox2 = Box.createVerticalBox();
		vBox2.add(Box.createVerticalStrut(50));
		vBox2.add(new JButton("fourth"));
		vBox2.add(Box.createVerticalStrut(50));
		hBox.add(vBox2);

		Box vBox3 = Box.createVerticalBox();
		vBox3.add(Box.createVerticalGlue());
		vBox3.add(new JButton("THis is the last button"));
		hBox.add(vBox3);

		f.setTitle("BoxLayout");
		f.pack();
		f.setVisible(true);

		f.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

	}

	public static void main(String[] args) {
		BoxLayoutDemo b = new BoxLayoutDemo();
	}
}
分享到:
评论

相关推荐

    java 如何使用BoxLayout布局管理器

    本篇文章将深入探讨如何在Java中有效地使用BoxLayout布局管理器。 首先,我们需要了解BoxLayout的基本概念。BoxLayout允许组件沿着一个轴线进行排列,轴线可以是X轴(水平方向),Y轴(垂直方向),或者Z轴(对于3D...

    java swing-BoxLayout的使用

    BoxLayout 是 Java Swing 库提供的一种布局管理器,用于在容器中沿着水平或垂直方向排列组件。 BoxLayout 的特点如下: 可以选择水平(X_AXIS)或垂直(Y_AXIS)方向进行排列。 组件按照添加的顺序依次排列,可以...

    Java中使用BoxLayout实现组件的垂直分布

    Java中使用BoxLayout实现组件的垂直分布

    java BoxLayout示例

    java se 自学过程中遇到的一些疑惑不解的地方,解决了之后把经验保留下课,分享给大家

    Java Swing组件BoxLayout布局用法示例

    Java Swing 组件 BoxLayout 布局用法示例中,我们详细介绍了 BoxLayout 的概念、使用方法、参数、控件的添加、分隔器的使用和应用实例。通过这篇文章,读者可以快速了解 Java Swing 组件 BoxLayout 布局用法,提高...

    java Swing布局管理之BoxLayout布局

    使用 BoxLayout 时,你需要在构造函数中传入一个容器实例,并指定布局的方向。这个方向可以通过以下常量来设置: 1. LINE_AXIS:根据 ComponentOrientation 属性确定的文本行方向来放置组件。 2. PAGE_AXIS:根据 ...

    Java中BoxLayout的一个简单例子

    提供了一个简单的BoxLayout例子。

    在java swing BoxLayout中创建空白

    使用java swing创建空白的一些方法。除了我在代码中提到的内容,你也可以自己尝试使用Box.createRigidArea(Dimension d)的方法。

    fview-boxlayout:IjzerenHein 著名的 boxlayout 的 Meteor Famous Views 插件

    使用 BoxLayout 的最详尽(但也是基本的)示例。 { {#BoxLayout margins= [] } } { { > Surface target= " topLeft " template= " box " class= " topLeft " } } { { > Surface target= " top " template= " ...

    java 绘制CPU使用率图形 源代码

    `BoxLayout`、`GridLayout`等布局管理器,用于组织组件。 - **事件监听**:更新CPU使用率图形需要定时器触发,这涉及`Timer`类和相应的事件处理器。 4. **图形绘制**: - **Graphics2D**:Java的2D图形API,用于...

    java gui 盒子布局实列

    3. **设置布局轴线**: `BoxLayout`有三个轴线选项:`BoxLayout.X_AXIS`、`BoxLayout.Y_AXIS`和`BoxLayout.LINE_AXIS`(等同于`X_AXIS`)。默认情况下,组件会沿着X轴排列,但你可以通过`setAxis()`方法改变: ```...

    Java Swing BoxLayout箱式布局的实现代码

    主要介绍了Java Swing BoxLayout箱式布局的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java Swing制作多行滚动歌词显示控件.doc

    在 Java Swing 中,我们可以使用 BoxLayout 来管理组件的布局。BoxLayout 可以用来创建一个垂直或水平的布局。 7. Java Swing 事件处理:ActionListener 在 Java Swing 中,我们可以使用 ActionListener 来处理...

    Java Swing大神必经之路

    本篇文章详细介绍了 BoxLayout 的使用,包括其继承体系、构造方法和常用方法,幫助讀者更好地理解 BoxLayout 的使用。 第16篇 Java Swing大神必经之路16:WindowFocusListener窗体焦点监听器 本篇文章详细介绍了 ...

    Swing基本标签使用

    Swing使用不同的布局管理器,如FlowLayout、GridLayout、BoxLayout和GridBagLayout等,来决定组件在窗口中的位置和大小。标签的位置可以通过选择合适的布局管理器和调整其参数来控制。 8. 组合使用 在实际应用中,...

    JavaGUI图型用户界面实例与布局

    例如,`WindowBox`类可能展示了如何使用BoxLayout创建一个包含两个垂直排列的子容器的窗口,每个子容器内部又可能有多个组件或子容器按照特定的轴线排列。 总之,Java GUI中的布局管理器是构建用户界面的关键工具,...

    使用java语言swing界面做的固定资产管理系统

    每个模块对应一个或多个JPanel,通过布局管理器(如FlowLayout、GridLayout、BoxLayout或BorderLayout)来排列组件,确保界面的整洁与合理性。 在实际开发中,数据存储通常选择关系型数据库,如MySQL,通过JDBC...

    swing-layout-1.0.jar

    `swing-layout-1.0.jar`库文件提供了一个额外的布局管理器——`BoxLayout2`,它是对Java标准库中`BoxLayout`的增强。`BoxLayout2`允许开发者在容器的任意轴上进行布局,并且增加了更多的对齐选项和间距控制。此外,...

    java swing 如何自动定位尾部

    要让组件在Y轴上始终位于底部,可以使用`BoxLayout.Y_AXIS`并调整顺序。 ```java JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.add(Box.createVerticalGlue()); // 添加可拉伸...

    java课件(完整版)第8章--2

    使用BoxLayout时,只需通过`setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS))`或`setLayout(new BoxLayout(panel, BoxLayout.COLUMN_AXIS))`来设置布局方向。盒式布局允许在组件之间添加间隔,可以通过`Box....

Global site tag (gtag.js) - Google Analytics