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

摘要:
FlowLayout应该是Swing布局管理器最简单和最基本的学习。然而,FlowLayout还提供了两种对齐方法:LEADING,这意味着控件对应于容器方向的起始边缘;拖曳,控件对应于集装箱方向的末端边缘。通常,LEADING是左对齐的,TRALING是右对齐的。此外,FlowLayout还可以设置内部控件之间以及内部控件与容器之间的间距,setHgap用于指定水平间距;SetVgap用于指定垂直间距。基本方法名称用法VoisetAgnment设置此布局的对齐方式。VoisetVgap设置组件之间以及组件和容器边缘之间的垂直间隙。

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); // 让窗体居中显示
    }
}

运行效果如下:

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

居中对齐

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

左对齐

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

右对齐

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

Leading对齐

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

Trailing对齐

免责声明:文章转载自《Swing-布局管理器之FlowLayout(流式布局)-入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇webpack入门(转载)Android按键添加和处理的方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Swing UI

基于JAVA Swing实现的自定义组件可折叠的JPanel组件 基本思想: 可折叠面板,分为两个部分-头部面板与内容面板 头部面板– 显示标题,以及对应的icon图标,监听鼠标事件决定内容面板隐藏或者显示 内容面板– 普通的JPanel组件。 实现: 头部面板: package com.gloomyfish.ui.demo; import java....

高级Swing容器(一)

第10章探讨了AWT与Swing中的布局管理器。在本章中,我们将会了解一些构建在这些布局管理器之上的容器以及其他的一些无需布局管理器的容器。我们的探讨由Box类开始,我们将会发现使用BoxLayout管理器来创建一个单行或单列组件的最好方法。接下来我们会了解JSplitPane容器,他类似于其中只有两个组件的特殊的Box。JSplitPane提供了一个分隔...

2.swing的事件

1.swing的EventListener            常用的是ActionEvent、ItemEvent、ChangeEvent、WindowEvent这几个事件,利用这几个事件处理方法,原则上可以处理大部分基本的需要,其他特殊事件的处理,通常应用在特定的组件是,若有必要处理这些事件,再查表即可。   ActionEvent:按下按钮时、选择一...

Swing菜单与工具栏(三)

6.1.6 JSeparator类 JSeparator类是一种特殊的组件,他在JMenu上提供分隔符。JPopupMenu与JToolBar类也支持分隔,但是每一个都使用JSeparator类的相应子类。除了可以放置在菜单上以外,JSeparator类也可以放置在任何我们希望使用水平或是垂直线来分隔屏幕不同区域的地方。 JSeparator是一个严格的...

核心Swing组件(六)

4.6 JButton类 JButton组件是可以被选中的最基本的AbstractButton组件。他支持文本,图像以及基于HTML的标签,如图4-12所示。 4.6.1 创建JButton JButton类具有5个构造函数: public JButton() JButton button = new JButton(); public JButto...

Java Swing编程之仿js树状折叠菜单

最近要完成一个需求:用swing做个树状菜单,含二级菜单,点击一级菜单展开二级菜单,且二级菜单数目超过预览视图会出现滚动条。由于swing研究的少,花了不少精力! 先看下测试效果图: 收起图: 展开图: 完整源码: 1 package com.xuwei.test2; 2 3 import java.awt.BorderLayout;...