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)));// 中间添加一个看不见的rigidArea
        middlePanel.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);
    }

}

运行效果图:

时间: 2024-08-07 04:07:45

Swing-BoxLayout用法-入门的相关文章

Swing-setAlignmentX()用法-入门

先看下API: public void setAlignmentX(float alignmentX) 设置垂直对齐方式. 参数: alignmentX - 新的垂直对齐方式 网上关于这个函数的详细情况介绍的不多,JAVA布局管理器提到说, setAlignmentX(left,right)只有在布局是BoxLayout.Y_AXIS才效,而setAlignmentY(top,button)在布局为BoxLayout.X_AXIS才效果.我基本同意这个理解,也就是说,setAlignmentX(

iOS多线程开发之GCD 用法入门

我们知道,在iOS中进行多线程编程,主要有三种方式:[NSThread].[NSOperation]和[GCD].其中又以[GCD]为苹果官方最为推荐.本文将利用一个简单的demo,简述GCD的用法入门,以及本人对GCD的一点肤浅理解和学习心得. 先把参考文章列出: http://www.cnblogs.com/kenshincui/p/3983982.html http://www.cnblogs.com/sunfrog/p/3305614.html http://mobile.51cto.c

Swing-JOptionPane对话框用法-入门

对话框是GUI程序中常见的界面,通常用来反馈提示信息.告警或获取用户输入.比如这种: JOptionPane是Swing中的一个对话框类,它能够提供常见的绝大多数对话框效果,本文对这个类进行介绍.需要说明的有两点:1.JOptionPane所提供的对话框是模态的,也就是说对话框会阻塞原窗口的显示:如果要创建一个非模态对话框,必须使用JDialog类.2.swing另外提供了JFileChooser类(文件选择器)和JColorChooser(颜色选择器),这些对话框比较特殊,以后专门再讲. JO

AWK用法入门详解

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK

Java-Properties用法-入门

对于应用程序的配置,通常的做法是将其保存在独立的配置文件中,程序启动时加载,修改时保存.Java中Properties类就提供了这样一种机制,配置项以Key-Value的数据结构存储在文本文件中,扩展名为".properties".Properties的用法很简单,使用load(FileInputStream in)进行读取:使用getProperty(String key)来读取键值:使用put(String key, String value)添加键值对,使用store(FileO

linux中的awk用法入门详解(一)

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. awk其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母.实际上 AWK

Swing-setBorder()用法-入门

注:本文内容转自:Swing编程边框(Border)的用法总结.内容根据笔者理解稍有整理. 函数说明: public void setBorder(Border border) 设置此组件的边框.Border 对象负责定义组件的 insets(直接对组件重写所有 insets 设置),并且可选地呈现这些 insets 范围内的边框装饰.要为 swing 组件创建有装饰的和无装饰的区域(例如边距和填充),应该使用边框(而不是 insets).在单个组件中可使用复合边框来嵌套多个边框. 虽然从技术上

MongoDB 用法入门(windows)①

概述 大家对数据库肯定不陌生,肯定也有很多人用过MySQL,但是在用MySQL的时候各种建表,写表之间的关联让人非常头疼. MongoDB也是一种数据库,但是它不是用表,而是用集合来装数据的,我对这种数据储存方式很感兴趣.所以我根据MongoDB3.6的官方说明文档整理了MongoDB入门级用法,供自己开发时参考,相信对其他人也有用. 这是慕课网上MongoDB的课程:mongoDB入门篇 这是MongoDB官方说明文档:The MongoDB Manual 什么是MongoDB Mongodb

LESS 用法入门

本文旨在加深对 LESS 的理解和记忆,供自己开发时参考.相信对没有接触过 LESS 的程序员还是有用的,大佬绕路. 一. 安装和使用 LESS 1.1 安装 使用命令行安装 LESS npm install -g less 2.1 使用 less 有多种的使用方法,在这里我向大家介绍最常用的俩种方法. 第一种是直接在浏览器中使用: 去下载一个你要的 less.js  脚本: 创建一个文件来放置你的样式,比如说style.less 添加下面的代码到你的 HTML 的 <head> 中. <