Swing-BoxLayout用法-入门

注:本文内容源于http://www.java3z.com/cwbwebhome/article/article20/200016.html?id=4797;细节内容根据笔者理解有修改。

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); 
panel.add(new JButton("hello"));
panel.add(new JButton("wolrd"));

 

在实际应用中,为了在控件直接添加间隔,我们常常需要分隔器,它有以下几种类型:
  • Rigid area 是一种用户可以定义水平和垂直尺寸的透明组件;
  • strut 与 rigid area 类似,但是用户只能定义一个方向的尺寸,即水平方向或者垂直方向,不能同时定义水平和垂直尺寸;
  • glue位于两个控件之间时,它会尽可能的占据两个控件之间的多余空间,从而将两个控件挤到两边;
  • Filler 是 Box 的内部类,它与 rigid area 相似,都可以指定水平或者垂直的尺寸,但是它可以设置最小,最大和优先尺寸。

下面是一个测试用例:

BoxLayoutDemo.java
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;public class BoxLayoutDemo extends JPanel {JPanel sportPanel;JPanel queryPanel;JPanel middlePanel;public BoxLayoutDemo() {// 主面板由3个子面板组成,在水平方向排列setLayout(new BoxLayout(this, BoxLayout.X_AXIS));this.setSportPanel();this.setMiddlePanel();this.setQueryPanel();this.add(sportPanel);this.add(middlePanel);this.add(queryPanel);}private void setSportPanel() {System.out.println("setSportPanel called");//本函数内包含以下两个控件JLabel sourceLabel;//文字标签JScrollPane sourceListScroller;//滚动条//文字标签sourceLabel = new JLabel("运动项目");sourceLabel.setAlignmentY(TOP_ALIGNMENT);sourceLabel.setBorder(BorderFactory.createEmptyBorder(4, 5, 0, 5));// 创建一个列表,包含运动项目DefaultListModel<String> listModel = new DefaultListModel<String>();listModel.addElement("100米");listModel.addElement("200米");listModel.addElement("400米");listModel.addElement("跳远");listModel.addElement("跳高");listModel.addElement("铅球");JList<String> sourceList = new JList<String>(listModel);sourceList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);sourceList.setVisibleRowCount(5);//初始状态保持5行可见//滚动条sourceListScroller = new JScrollPane(sourceList);sourceListScroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);sourceListScroller.setAlignmentY(TOP_ALIGNMENT);//开始布局主面板sportPanel = new JPanel();        sportPanel.setLayout(new BoxLayout(sportPanel, BoxLayout.Y_AXIS));// 垂直布局sportPanel.setBorder(BorderFactory.createBevelBorder(1));sportPanel.add(sourceLabel);// 加入文字标签到sportPanel.add(sourceListScroller);// 加入运动项目列表
}private void setMiddlePanel() {//本函数包含2个按钮JButton toTargetButton = new JButton(">>");JButton toSourceButton = new JButton("<<");//布局主面板middlePanel = new JPanel();middlePanel.setBorder(BorderFactory.createBevelBorder(1));middlePanel.setLayout(new BoxLayout(middlePanel, BoxLayout.Y_AXIS));//主面板为垂直布局
        middlePanel.add(toTargetButton);// 添加第一个按钮>>middlePanel.add(Box.createRigidArea(new Dimension(15, 15)));// 中间添加一个看不见的rigidAreamiddlePanel.add(toSourceButton);// 添加第二个按钮<<
    }private void setQueryPanel() {//本函数包含2个控件
        JLabel targetLabel;JScrollPane targetListScroller;// 文字标签targetLabel = new JLabel("查询项目");targetLabel.setAlignmentY(TOP_ALIGNMENT);targetLabel.setBorder(BorderFactory.createEmptyBorder(4, 5, 0, 5));// 创建列表查询项目DefaultListModel<String> targetListModel = new DefaultListModel<String>();targetListModel.addElement("100米");JList<String> targetList = new JList<String>(targetListModel);targetList.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);//滚动条targetListScroller = new JScrollPane(targetList);targetListScroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);targetListScroller.setAlignmentY(TOP_ALIGNMENT);//设置主面板布局queryPanel = new JPanel();        queryPanel.setLayout(new BoxLayout(queryPanel, BoxLayout.Y_AXIS));// 垂直布局queryPanel.setBorder(BorderFactory.createBevelBorder(1));queryPanel.add(targetLabel);//添加文字标签queryPanel.add(targetListScroller);//添加滚动条
    }public static void main(String[] args) {JFrame frame = new JFrame("BoxlayoutDemo");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setContentPane(new BoxLayoutDemo());frame.pack();// frame.repaint();frame.setLocationRelativeTo(null);frame.setVisible(true);}}

运行效果图:

 

转载于:https://www.cnblogs.com/pzy4447/p/4631585.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python开发利器之UliPad

一、安装Ulipad 因为ulipad编辑器使用的是wxpython编写的gui&#xff0c;所以我们需要第三方库wxpython的支持&#xff0c;先讲一下Ulipad在Windows系统环境下的安装&#xff1a; 1. 确实自己的windows版本&#xff0c;32位还是64位的。2. 查看自己安装的 Python版本&#xff0…

网页中如何使用一些特殊字体

虽然我们可以通过图片&#xff0c;flash、SIFR等技术来实现网页使用特殊字体&#xff0c;有利于SEO网页中嵌入特殊字体方法&#xff0c;font-face属性。 通常网页上不能使用一些特殊字体&#xff0c;否则浏览者可能无法正确浏览到&#xff0c;虽然我们可以通过图片&#xff0c…

Google浏览器中的开发工具.

惯例 我是温浩然: google浏览器&#xff0c;按下F12后&#xff0c;出现开发控制台。 下面有这么几栏&#xff0c;elements,network,sources,timeline ,profiles,resources,audits ,console. elements&#xff0c;是页面源码&#xff0c;network&#xff0c;是看请求的&#xff…

【思考】一次交付项目小结

【背景】 公司销售谈了一个重要的项目&#xff0c;与我们正在研发的一个产品关系比较大&#xff0c;可惜前期由于种种原因&#xff0c;耽搁了很长时间&#xff0c;等到我们研发部门知道消息的时候&#xff0c;已经很晚了。9月中旬启动&#xff0c;11月下旬要求上线&#xff0c;…

flask接收前台的form数据

html 记得访问从服务里打开 表单html 不能直接打开表单html https://www.cnblogs.com/wanghaonull/p/6340096.html

【bzoj4399】魔法少女LJJ 并查集+权值线段树合并

题目描述 在森林中见过会动的树&#xff0c;在沙漠中见过会动的仙人掌过后&#xff0c;魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的绿色世界,空气清新、淡雅,到处散发着醉人的奶浆味&#xff1b;小猴在枝头悠来荡去,好不自在&#xf…

树莓派Raspbian Buster/Debian 10 安装ROS

目录一些补充安装ROS初始化rosdep测试平台&#xff1a;树莓派4B 系统版本&#xff1a; 2020-05-27-raspios-buster-arm64.img 一些补充 系统安装参考 【树莓派学习笔记】一、烧录系统、(无屏幕)配置Wifi和SSH服务 【树莓派学习笔记】二、(无屏幕)SSH远程登录、图形界面及系统…

pjsip视频通信开发(上层应用)之EditText重写

我们经常使用手机的打电话功能&#xff0c;当我们按键盘的时候&#xff0c;有一个地方显示我们按键的内容&#xff0c;当我们的手点击那个地方的时候&#xff0c;并没有弹出软件盘&#xff0c;所以我们再有数字键盘的时候&#xff0c;要屏蔽系统的软件盘。 我们分析一下&#x…

JavaWeb重要知识点总结

JavaWeb学习篇之----容器Response详解http://blog.csdn.net/jiangwei0910410003/article/details/22886847获得所有请求头名称和头信息java.util.Enumeration names request.getHeaderNames();System.out.println("");while(names.hasMoreElements()){String name …

pycharm 中HTML代码的对齐

以前用sublime &#xff0c;现在django要在pycharm编辑html&#xff0c;要实现html的格式化&#xff0c; 用快捷键 CtrlAltL 非常实用

树莓派安装Ubuntu MATE及ROS系统

目录解锁SSH换源安装VNC服务安装ROS初始化rosdep和环境测试平台&#xff1a;树莓派4B 系统版本&#xff1a; ubuntu-mate-20.04.1-desktop-armhfraspi.img 在Raspberry Pi Download Options下载系统镜像 在树莓派资源下载 | 树莓派实验室下载工具 使用SDForm…

mysql 清空表的两种方法

一、Delete DELETE FROM table; 二、Truncate TRUNCATE table; 第一种方法其实就是去掉where条件&#xff0c;没有了条件&#xff0c;也就是删除掉表里面的所有记录了&#xff1b; 第二种方法像是重置表&#xff0c;把表中内容全部清除&#xff0c;回到刚建好表的状态&#xff…

jQuery学习笔记(四)

jQuery对表单、表格的操作及更多应用 表单应用 一个表单组成部分&#xff1a; 表单标签、表单域及表单按钮 单行文本框应用获取和失去焦点事件 $(function(){ $(":input").focus(function(){ //获取焦点触发事件 $(this).addClass("focus"); //增加样…

Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法

https://www.cnblogs.com/DragonFire/p/9259999.html 是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 STUDENT {name: Old, age:…

【Jetson Nano学习笔记】1. 系统镜像和ROS的安装

目录安装系统换源安装VNC服务安装ROS初始化rosdep和环境测试平台&#xff1a;Jetson Nano 系统版本&#xff1a;4.6.1 安装系统 在Jetson Download Center下载镜像&#xff1a; 在树莓派资源下载 | 树莓派实验室下载工具 使用SDFormatter格式化内存卡 使用balenaEtcher烧录镜…

我的Android进阶之旅------Android利用Sensor(传感器)实现水平仪功能的小例

这里介绍的水平仪&#xff0c;指的是比较传统的气泡水平仪&#xff0c;在一个透明圆盘内充满液体&#xff0c;液体中留有一个气泡&#xff0c;当一端翘起时&#xff0c;该气泡就会浮向翘起的一端。 利用方向传感器返回的第一个参数&#xff0c;实现了一个指南针小应用。我的And…

【linux命令总结】——后续用到的内容持续补充和更新

比如说&#xff1a;某个文件是go文件&#xff0c;名字叫做 Hello.go 1、通过后台运行某个程序&#xff0c;将结果输出到某个文件&#xff0c; 如果是直接运行go程序&#xff1a;go run Hello.go 后台运行&#xff1a;nohup go run Hello.go & &#xff0c;然后就会将结果输…

【Jetson Nano学习笔记】2. ORB-SLAM3及ZED 2i驱动安装

目录ZED 2i驱动安装安装驱动自测ROS测试zed2i.launchrostopic listrosnode listdisplay_zed2i.launchzed_rtabmap.launchORB-SLAM3安装OpenCV 3安装Glew安装Pangolin安装boost安装Eigen 3安装OpenGL安装openssl安装ORB-SLAM3建立swap准备编译编译关闭swap平台&#xff1a;Jetso…

给超链接(a标签)加onclick事件

<a onclick"alert(1)">超链接1</a><br> <a href"#" onclick"alert(2)">超链接2</a> <br> <a href"javascript:alert(3)">超链接3</a>

proj1088

滑雪Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 69608 Accepted: 25669Description Michael喜欢滑雪百这并不奇怪&#xff0c; 因为滑雪的确很刺激。可是为了获得速度&#xff0c;滑的区域必须向下倾斜&#xff0c;而且当你滑到坡底&#xff0c;你不得不再次走…