Swing-布局管理器之FlowLayout(流式布局)-入门

FlowLayout应该是Swing布局管理器学习中最简单、最基础的一个。所谓流式,就是内部控件像水流一样,从前到后按顺序水平排列,直到达到容器的宽度时跳转到第二行。既然是水平排列,那么就存在三种基本的对齐方式:居中对齐(CENTER )、左对齐(LEFT )和右对齐(RIGHT )。然而,FlowLayout还提供两种对齐方式:LEADING,表示控件与容器方向开始边对应;TRAILING,控件与容器方向结束边对应。setAlignment(int align)用于设置对齐方式。在一般情况下,LEADING就是左对齐,TRAILING就是右对齐。除此之外,FlowLayout还可以对内部控件之间、内部控件与容器之间的间距进行设置,setHgap(int hgap)用于指定水平间距;setVgap(int vgap)用于指定垂直间距。

FlowLayout常用方法如下:


构造函数


名称


用途


FlowLayout()


构造一个新的 FlowLayout,它是默认居中对齐的,默认的水平和垂直间隙是5个像素


FlowLayout(int align)


构造一个新的 FlowLayout,它具有指定的对齐方式,默认的水平和垂直间隙是 5 个像素

五个参数值及含义如下:

0或FlowLayout.lEFT ,控件左对齐

1或FlowLayout.CENTER ,居中对齐

2或FlowLayout.RIGHT ,右对齐

3或FlowLayout.LEADING,控件与容器方向开始边对应

4或FlowLayout.TRAILING,控件与容器方向结束边对应

如果是0、1、2、3、4之外的整数,则为左对齐


FlowLayout(int align, int hgap, int vgap)


创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水平和垂直间隙。


基本方法


名称


用途


Void setAlignment(int align)


设置此布局的对齐方式。


void setHgap(int hgap)


设置组件之间以及组件与 Container 的边之间的水平间隙。


void setVgap(int vgap)


设置组件之间以及组件与 Container 的边之间的垂直间隙。

测试用例如下:

package LayoutDemo;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/*
 * @功能:演示FlowLayout布局管理器的用法
 * @版本:20150609
 */

public class FlowLayoutDemo extends JFrame {

    FlowLayout contentPanelLayout = new FlowLayout();
    Map<String, Integer> alignmentMap = new HashMap<String, Integer>();
    JPanel configPanel = new JPanel();
    JPanel contentPanel = new JPanel();
    JComboBox<String> alignmentComboBox = new JComboBox<String> ();
    JTextField textHgap = new JTextField("10");
    JTextField textVgap = new JTextField("20");
    MyListener myListener = new MyListener();

    public FlowLayoutDemo() {
        //init
        alignmentMap.put("LEFT", 0);
        alignmentMap.put("CENTER", 1);
        alignmentMap.put("RIGHT", 2);
        alignmentMap.put("LEADING", 3);
        alignmentMap.put("TRAILING", 4);

        //设置面板
        configPanel.setLayout(new FlowLayout());
        configPanel.add(new JLabel("对齐方式"));

        for (String alignment : alignmentMap.keySet()) {
            alignmentComboBox.addItem(alignment);
        }

        configPanel.add(alignmentComboBox);
        configPanel.add(new JLabel("水平间距"));

        configPanel.add(textHgap);
        configPanel.add(new JLabel("垂直间距"));

        configPanel.add(textVgap);

        JButton actionBtn = new JButton("Action!!!");
        actionBtn.addActionListener(myListener);
        configPanel.add(actionBtn);

        //展示面板

        contentPanel.setLayout(contentPanelLayout);
        contentPanel.add(new JButton("Button 1"));
        contentPanel.add(new JButton("Button 2"));
        contentPanel.add(new JButton("Button 3"));
        contentPanel.add(new JButton("Button 4"));

        //主窗体
         setLayout(new BorderLayout());
        add("North",configPanel);
        add("South", contentPanel);
    }

    class MyListener implements ActionListener
    {
         public void actionPerformed(ActionEvent e)
         {
             String alignmentStr = alignmentComboBox.getSelectedItem().toString();
             int alignment = alignmentMap.get(alignmentStr);
             contentPanelLayout.setAlignment(alignment);
             int hgap = Integer.valueOf(textHgap.getText());
                int vgap = Integer.valueOf(textVgap.getText());
               contentPanelLayout.setHgap(hgap);
               contentPanelLayout.setVgap(vgap);

               contentPanel.updateUI();
         }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        FlowLayoutDemo window = new FlowLayoutDemo();
        window.setTitle("FlowLayoutDemo");
        // 该代码依据放置的组件设定窗口的大小使之正好能容纳你放置的所有组件

        window.setPreferredSize(new Dimension(500, 200));
        window.pack();
        window.setVisible(true);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLocationRelativeTo(null); // 让窗体居中显示
    }
}

运行效果如下:

居中对齐

左对齐

右对齐

Leading对齐

Trailing对齐

时间: 2024-10-13 00:29:29

Swing-布局管理器之FlowLayout(流式布局)-入门的相关文章

java进阶10 GUI图形界面 布局管理器之FlowLayout GridLayout

先说说FlowLayout 流式布局管理器. 效果 这是当第一行显示不下,才转到第二行的. 看看代码 package Frame; import java.awt.BorderLayout; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class MyLayout{ JFrame frame; public MyLayout(JFrame frame) { //

三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)

摘自http://blog.csdn.net/liujun13579/article/details/7772491 三十一.Java图形化界面设计--布局管理器之GridLayout(网格布局) 网格布局特点: l  使容器中的各组件呈M行×N列的网格状分布. l  网格每列宽度相同,等于容器的宽度除以网格的列数. l  网格每行高度相同,等于容器的高度除以网格的行数. l  各组件的排列方式为:从上到下,从左到右. l  组件放入容器的次序决定了它在容器中的位置. l  容器大小改变时,组件

三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)

摘自 http://blog.csdn.net/liujun13579/article/details/7773945 三十二.Java图形化界面设计--布局管理器之CardLayout(卡片布局) 卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout类提供的方法可以切换该空间中显示的组件. 1.  CardLayout类的常用构造函数及方法 2.  使用CardLayout类提供的方法可以切换显

Java图形化界面设计——布局管理器之FlowLayout(流式布局)

一.布局管理器所属类包 所属类包 布局管理器名称 说明 Java.awt FlowLayout(流式布局) 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列 BorderLayout(边界布局) 容器划分为东.西.南.北.中五个区域,每个区域只能放置一个组件. GridLayout(网格布局) 容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件. CardLayout(卡片布局) 如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌.适用于在一

转:Java图形化界面设计——布局管理器之FlowLayout(流式布局)其他请参考转载出处网址

http://blog.csdn.net/liujun13579/article/details/7771191 前文讲解了JFrame.JPanel,其中已经涉及到了空布局的使用.Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性. 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器. 一.布局管理器所属类包 所属类包 布局管理器名称 说明 Jav

03 Java图形化界面设计&mdash;&mdash;布局管理器之FlowLayout(流式布局)

前文讲解了JFrame.JPanel,其中已经涉及到了空布局的使用.Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性. 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器. 一.布局管理器所属类包 所属类包 布局管理器名称 说明 Java.awt FlowLayout(流式布局) 组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一

java Swing布局管理器之FlowLayout布局

Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性. 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器.前面已经简单介绍过几种布局管理器,这篇将展示FlowLayOut布局是使用方法 FlowLayout(流式布局) 使用FlowLayout布局方式的容器中组件按照加入的先后顺序按照设置的对齐方式(居中.左对齐.右对齐)从左向右排列,一行排满(即组

三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)

边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH.SOUTH.依次相应为:上北(NORTH).下南(SOUTH).左西(WEST).右东(EAST),中(CENTER),例如以下图所看到的. 特征: l  能够把组件放在这五个位置的随意一个,假设未指定位置,则缺省的位置是CENTER. l  南.北位置控件各占领一行,控件宽度将自己主动布满整行.东.西和中间位置占领一行;若东.西.南.北位置无控件,则中间控件将自己主动布满整个屏幕.若东.西.南.北位置中不管

04 Java图形化界面设计——布局管理器之BorderLayout(边界布局)

边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH.SOUTH.依次对应为:上北(NORTH).下南(SOUTH).左西(WEST).右东(EAST),中(CENTER),如下图所示. 特征: l  可以把组件放在这五个位置的任意一个,如果未指定位置,则缺省的位置是CENTER. l  南.北位置控件各占据一行,控件宽度将自动布满整行.东.西和中间位置占据一行;若东.西.南.北位置无控件,则中间控件将自动布满整个屏幕.若东.西.南.北位置中无论哪个位置没有控件

Flutter 布局类组件:流式布局(Wrap和Flow)

前言 把超出屏幕显示范围会自动折行的布局称为流式布局.Flutter中通过Wrap和Flow来支持流式布局,将Row换成Wrap后溢出部分则会自动折行. Wrap 接口描述 Wrap({ Key key, this.direction = Axis.horizontal, this.alignment = WrapAlignment.start, // 主轴方向子widget的间距 this.spacing = 0.0, // 纵轴方向的对齐方式 this.runAlignment = Wrap