使用BoxLayout进行Swing控件布局的实例教程

引言

在用户使用 Java Swing 进行用户界面开发过程中,会碰到如何对 Java Swing 的控件进行布局的问题。 Swing 的控件放置在容器 (Container) 中,容器就是能够容纳控件或者其它容器的类,容器的具体例子有 Frame、Panel 等等。容器需要定义一个布局管理器来对控件进行布局管理,Swing 当中提供的主要的布局管理器有 FlowLayout、 BorderLayout、BoxLayout、GridLayout 和 GridBaglayout, 它们的主要特点如表 1 所示:

本文主要关注在 BoxLayout 布局 管理器的使用上。我们首先对 BoxLayout 作一下介绍。

BoxLayout 介绍

如前所述,BoxLayout 可以把控件 依次进行水平或者垂直排列布局,这是通过参数 X_AXIS、Y_AXIS 来决定的。X_AXIS 表示水平排列,而 Y_AXIS 表示垂直 排列。BoxLayout 的构造函数有两个参数,一个参数定义使用该 BoxLayout 的容器,另一个参数是指定 BoxLayout 是采用 水平还是垂直排列。下面是一个创建 BoxLayout 实例的例子:

JPanel panel=new JPanel();

BoxLayout layout=new BoxLayout(panel, BoxLayout.X_AXIS);

panel.setLayout(layoout);

在这个例子中,一个 BoxLayout 布局管理器的实例 layout 被创建,这个实例被设置为 panel 的布局管理器,该布局管理器采用了水平排列来 排列控件。

当 BoxLayout 进行布局时,它将所有控件依次按照控件的优先尺寸按照顺序的进行水平或者垂直放置, 假如布局的整个水平或者垂直空间的尺寸不能放下所有控件,那么 BoxLayout 会试图调整各个控件的大小来填充整个布局 的水平或者垂直空间。

BoxLayout 往往和 Box 这个容器结合在一起使用,这么做的理由是,BoxLayout 是把控件以 水平或者垂直的方向一个接一个的放置,如果要调整这些控件之间的空间,就会需要使用 Box 容器提供的透明的组件作为 填充来填充控件之间的空间,从而达到调整控件之间的间隔空间的目的。Box 容器提供了 4 种透明的组件,分别是 rigid area、strut、glue、filler。Box 容器分别提供了不同的方法来创建这些组件。这四个组件的特点如下:

Rigid area 是一种用户可以定义水平和垂直尺寸的透明组件;

strut 与 rigid area 类似,但是用户只能定义一个方向的尺寸 ,即水平方向或者垂直方向,不能同时定义水平和垂直尺寸;

当用户将 glue 放在两个控件之间时,它会尽可能的占据 两个控件之间的多余空间,从而将两个控件挤到两边;

Filler 是 Box 的内部类,它与 rigid area 相似,都可以指定 水平或者垂直的尺寸,但是它可以设置最小,最大和优先尺寸。

用 BoxLayout 进行布局

在了解了 BoxLayout 和 Box 容器的基本特点后,我们来看一下 BoxLayout 的优点,首先 BoxLayout 可以进行对控件进行垂直或者 水平布局,同时 BoxLayout 使用起来较为简单,然而把它和 Box 容器相结合,就可以进行较为复杂的布局,达到同使用 GridBagLayout 的一样的效果,但是使用起来要简单方便多了。我们用按钮的布局作为例子来看怎样运用 BoxLayout 和 Box 容器进行布局:

图 1. 应用 BoxLayout 进行按钮布局例子 1

时间: 2025-01-20 21:22:46

使用BoxLayout进行Swing控件布局的实例教程的相关文章

imageview-Android两个控件布局,占满父亲

问题描述 Android两个控件布局,占满父亲 我的mainactivity的布局文件,默认的是一个相对布局.我里面就两个控件,一个Button和一个ImageView.我想让Button紧贴着父亲的上面,ImageView占满剩下的区域.Button的高度就普通的就行.我贴上我的代码,老出错.一运行就崩掉. <Button android:id="@+id/mybtn" android:layout_alignParentTop="true" android

窗口编程-swing控件创建的时候没有赋值,后面如何使用他

问题描述 swing控件创建的时候没有赋值,后面如何使用他 通过jpanel,text能获得吗?或者其他什么方法,新手求帮助 ,新手求帮助 解决方案 可以将其声明为成员变量或者全局变量,这样就可以在你用到它的时候直接new了,就可以被使用了.你还可以在构造函数中初始化,以防出错.希望能帮到你 解决方案二: 定义成全局变量,后面通过全局访问

九宫图比较常用的多控件布局(GridView)使用介绍_Android

GridView跟ListView都是比较常用的多控件布局,而GridView更是实现九宫图的首选!本文就是介绍如何使用GridView实现九宫图.GridView的用法很多,网上介绍最多的方法就是自己实现一个ImageAdapter继承BaseAdapter,再供GridView使用,类似这种的方法本文不再重复,本文介绍的GridView用法跟前文ListView的极其类似.也算是我偷懒一下,嘻嘻嘻嘻.... 先来贴出本文代码运行的结果:  本文需要添加/修改3个文件:main.xml.nig

分析Silverlight Button控件布局

分析Silverlight Button控件布局   答:关于按钮自适应 Silverlight也算一个比较开放的技术.Button控件其实也是一些标准的Grid.Canvas.Rectangle.TextBlock组成的.(图1) 要做到按钮的宽度和高度根据字体大小和字数自动适应,其实就是调整好Layout,做以一个能自适应的界面.在Silverlight中Grid这个容器是能自适应的.是把字体TextBlock放到一个Grid中,对这个TextBlock设置相当Grid的边距,就好像是htm

ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表

原文:ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表 本篇文章将介绍区域报表和页面报表的常见使用场景.区别和选择报表类型的一些建议,两种报表的模板设计.数据源(设计时和运行时)设置.和浏览报表的区别. ActiveReports 报表控件官方中文入门教程 (1)-安装.激活以及产品资源 ActiveReports 报表控件官方中文入门教程 (2)-创建.数据源.浏览以及发布 本篇文章包括以下部分: 1.区域报表和页面报表的区别 两种报表的具体应用场景 区

Android控件动态用法实例分析_Android

本文实例讲述了Android控件动态用法.分享给大家供大家参考.具体如下: 通常android里的界面布局都是在XML里设定好的 也就是说 在程序中,不能更改界面上的元素数量等, 比如聊天会话界面 当有人发言就要增加一个TextView,这就是动态增加控件,这就不能在XML里事先布局了! 不过还好,ANDROID使用控件也不是只有XML这一种方式 以下代码就是动态生产控件的JAVA程序 package com.fetion.android; import android.app.Activity

js判断页面中是否有指定控件的简单实例

本篇文章主要是对js判断页面中是否有指定控件的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 if (document.getElementById('show_pic')!=null){document.getElementById('show_pic').src=this.value;} show_pic是页面中的一个图片控件,我们首先要保证这个控件存在于页面上,才能对其进行操作,不然JS就会出现错误,所以用这种方式进行了判断,我听网友说,JS中还有一个函数,可以判断对象是

ActiveReports 报表控件官方中文入门教程 (1)-安装、激活以及产品资源

原文:ActiveReports 报表控件官方中文入门教程 (1)-安装.激活以及产品资源 本系列文章主要是面向初次接触 ActiveReports 产品的用户,可以帮助您在三天之内轻松的掌握ActiveReports控件的基本使用方法,包括安装.激活.创建报表.绑定数据源以及发布等内容.本篇文章我们就从安装产品开始带您开启轻松的 ActiveReports 体验之旅. 系列文章列表: ActiveReports 报表控件官方中文入门教程 (2)-创建.数据源.浏览以及发布 ActiveRepo

activex-求大神给我一个使用ocx控件的完整实例代码

问题描述 求大神给我一个使用ocx控件的完整实例代码 我现在需要将ocx控件封装成DLL,方便别人调用.但是做了几天,完全没有头绪,以前没有做过相关的东西.有做过类似东西的,给我一个回复好不.我没有C币,所以,你懂的. 解决方案 ocx本身就是dll(虽然它具有不同的后缀名,但是你用depend之类的工具去看,它也有导出表,比如dllregister函数,dllmain入口,你也可以用loadlibrary装载它).不知道你说的封装成dll是什么意思,供什么语言调用. 解决方案二: 我的意思是由