首页 > 代码库 > 【Swing 2】布局管理器上

【Swing 2】布局管理器上

    很苦逼的是,每次想记录一个小程序,发现,要给别人讲清楚,总是得分很多模块讲解。

所以今天来讲下Swing组件的三大布局管理器。

    参考:《Head First Java》第十三章

    

    1. BorderLayout——边界布局

    2. FlowLayout——顺序布局    

    3. BoxLayout——不知道叫啥

 

1. BorderLayout(边界布局)

 该管理器把背景分成东南西北中五大块,这是框架默认的布局管理器

 1 package demo;
 2 
 3 import javax.swing.*;
 4 import java.awt.*;
 5 
 6 public class Test {
 7     public static void main(String[] args) {
 8         new Test();    // 用new方法创建Test对象, 执行构造函数
 9    }                   
10     Test() {           // 构造函数——类名(){}, 在类实例化时(使用new)被调用
11         JFrame frame = new JFrame();
12         // 关闭窗口时结束程序, 不然每次运行, 每个产生的javaw.exe进程, 都会占用内存 
13         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
14         
15         frame.getContentPane().add(BorderLayout.NORTH, new JButton("北风之神"));
16         frame.getContentPane().add(BorderLayout.WEST, new JButton("西风烈烈"));
17         frame.getContentPane().add(BorderLayout.EAST, new JButton("东方不败"));
18         frame.getContentPane().add(BorderLayout.SOUTH, new JButton("南国红豆"));
19         
20         frame.setSize(400, 300);                // 设置长为400像素, 宽为300像素
21         frame.setVisible(true);                 // 窗口设置为可见
22    }
23 }

技术分享

 

2. FlowLayout(顺序布局)

每个组件都会按照理想的大小呈现,并且会从左到右依照加入的顺序排列。当组件放不下时会被放到下一行

FlowLayout是面板的默认的布局管理器

 1 package demo;
 2 
 3 import java.awt.*;
 4 import javax.swing.*;
 5 
 6 public class Test {
 7     
 8     public static void main(String[] args) {
 9         new Test();
10     }
11     
12     Test() {
13         JFrame frame = new JFrame();
14         JPanel panel = new JPanel();
15         
16         panel.add(new JButton("一号"));
17         panel.add(new JButton("二号"));
18         panel.setBackground(Color.darkGray);         // 把面板的颜色设置为深灰色
19          // 关闭窗口时结束程序, 不然每次运行, 每个产生的javaw.exe进程, 都会占用内存 
20         frame.getContentPane().add(BorderLayout.EAST, panel);// 把JPanel及其组件添加到JFrame中
21         
22         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
23         frame.setSize(400, 300);
24         frame.setVisible(true);
25     }
26 }

    由于框架的东西南北中五大区域中每的个区域只能加一个组件,所以可以通过加面板,然后在面板上再加组件

    当我们把面板加到框架时,面板的大小与位置还是受BorderLayout布局的管理。但面板内部的组件

(通过panel.add(someComponent)加入)是由面板的FlowLayout布局来管理的。

技术分享

 

3. BoxLayout

不像FlowLayout布局,就算水平宽度足以容纳组件,它还是会用新的行来排列组件。

package demo;

import javax.swing.*;
import java.awt.*;

public class Test {
    public static void main(String[] args) {
        new Test();
    }
    Test() {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        
        panel.add(new JButton("一号"));
        panel.add(new JButton("二号"));
        panel.setBackground(Color.darkGray);                      // 把面板的颜色设置为深灰色
        
        frame.getContentPane().add(BorderLayout.EAST, panel); // 把JPanel及其组件添加到JFrame中
        // 关闭窗口时结束程序, 不然每次运行, 每个产生的javaw.exe进程, 都会占用内存 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300);
        frame.setVisible(true);
    }
    
}

技术分享

 

【Swing 2】布局管理器上