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

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

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

1. BorderLayout——边界布局

2. FlowLayout——顺序布局

3. BoxLayout——不知道叫啥

1. BorderLayout(边界布局)

该管理器把背景分成东南西北中五大块,在周围放置4个边界组件后,余下的空间都分配给中央的组件,

因此它通常是最大的。这是框架默认的布局管理器

 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);}}

--------------------------------------------------------------------------------------------------------

搞定了上面的基本原理之后,我们来设计一个简单的登录界面,用到了内部类(inner class)来实现同一个接

口的方法。内部类,顾名思义,就是放在一个类里面的类,可以直接使用外层类的实例变量和静态变量。

  以下就是利用两个JPanel类型面板来放置JLabel标签,JTextField文本框和一个JPanel面板放置按钮。

记得面板默认使用的是流式布局管理器吗?(FlowLayout),(就是让组件从左排到右的那种)。最后再把三

个面板统一加到JFrame上,这时用到的是JFrame默认的边界管理器(BorderLayout),分别把它们放在北

、中、南三个区域。

 1 package demo;
 2
 3 import javax.swing.*;
 4 import java.awt.event.*;
 5
 6 public class DrawPanel {
 7     public static void main(String[] args) {
 8         DrawPanel d = new DrawPanel();
 9         d.buildGui();
10     }
11     public void buildGui() {
12         JFrame f = new JFrame("登录界面");                     // 设置窗口标题, 也可以用f.setTitle()设置;
13         JLabel userLabel = new JLabel("用户: ");                  // label: 标签
14         JLabel passLabel = new JLabel("密码: ");
15
16         JTextField userText = new JTextField(10);             // 设置字宽为10, 而不是像素
17         JTextField passText = new JTextField(10);
18
19         JPanel labelPanel = new JPanel();                     // JPanel是面板类型, 拿来放其他组件的
20         labelPanel.add(userLabel);
21         labelPanel.add(userText);
22
23         JPanel textPanel = new JPanel();
24         textPanel.add(passLabel);
25         textPanel.add(passText);
26
27         JPanel buttonPanel = new JPanel();
28         JButton signInButton = new JButton("登录");
29         JButton exitButton = new JButton("退出");
30         signInButton.addActionListener(new SignInListener()); // 向按钮注册监听事件
31         exitButton.addActionListener(new ExitListener());
32         buttonPanel.add(signInButton);
33         buttonPanel.add(exitButton);
34
35         f.add("North", labelPanel);                          // 若无设置方位的话, 默认是"Center"
36         f.add("Center", textPanel);
37         f.add("South", buttonPanel);
38
39         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    // 设置界面关闭后程序退出(退出javaw.exe进程)
40         f.setSize(400, 300);
41         f.setVisible(true);                                     // 若缺少此句或设为false的话窗口不显示
42     }
43
44     class SignInListener implements ActionListener {
45         public void actionPerformed(ActionEvent e) {
46         }
47     }
48
49     class ExitListener implements ActionListener {
50         public void actionPerformed(ActionEvent e) {
51             System.exit(0);                                     // 退出窗口
52         }
53     }
54 }

简单版

转载于:https://www.cnblogs.com/Ruby517/p/6358280.html

【Swing 2】布局管理器与简单的登录界面相关推荐

  1. java group布局_Java 的swing.GroupLayout布局管理器的使用方法和实例

    GroupLayout 是一个 LayoutManager,它将组件按层次分组,以决定它们在 Container 中的位置.GroupLayout 主要供生成器使用,但也可以手工编码.分组由 Grou ...

  2. 博为峰Java技术文章 ——JavaSE Swing FlowLayout布局管理器I

    2019独角兽企业重金招聘Python工程师标准>>> 博为峰小博老师: 这种布局管理器的策略也非常简单,它是按照控件加入的先后顺序从左到右排列,一行排满了,再换下一行,然后在从左到 ...

  3. Java Swing的布局管理器

    在Swing的实际开发中,开发人员在添加组件到容器中的时候可以自由调整组件的大小和在容器中的位置,这样虽然很灵活,但操作起来却很麻烦.为了加快开发速度,Java 提供了一些布局管理器,它们可以将组件进 ...

  4. Android布局管理器-使用TableLayout表格布局管理器实现简单的用户登录页面

    场景 Android布局管理器-使用FrameLayout帧布局管理器显示层叠的正方形以及前景照片: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  5. java group布局_Java的swing.GroupLayout布局管理器的使用方法和实例

    /** * @author :陶伟基 ,微博:http://weibo.com/taoandtao * @date :2012/12/10 * @place:广州大学华软软件学院 */ importj ...

  6. re管理器Java_自定义布局管理器-FormLayout

    第二部分:自定义布局管理器 在java.awt包与javax.swing包下有许多现成的布局类,比如BorderLayout.FlowLayout,还有较为复杂的.用于精确定位的布局类GridBagL ...

  7. pyqt 控件焦点_PyQt5(2)——调整布局(布局管理器)第一个程序

    我们拖拽一个UI文件,转为PY文件后生成一个类Ui_MainWindow 此时,我们新建一个文件,用来控制业务逻辑(继承界面中的类),跟界面分开,这样我们就完成了界面和逻辑相分离(这段代码使用率基本1 ...

  8. java-Layout(布局管理器)

    Layout(布局管理器) 布局管理就是用于指定组件的 摆放位置的.每种布局管理器都有自己的摆放风格. 注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器. 一.布局管理器所属类包 所 ...

  9. Swing布局管理器介绍

    当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理.JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout. ...

最新文章

  1. 给PHPSTORM添加XDEBUG调试功能
  2. 华为ensp小实验(路由下发+Easy IP+单臂路由+OSPF+Rip)
  3. 阿里云ACE共创空间——大数据方案体验1 日志服务
  4. scratch desktop的基本使用 - 如何使用积木
  5. 中国双侧人工耳蜗行业市场供需与战略研究报告
  6. stackexchange.mysql_StackExchange.Redis客户端读写主从配置,以及哨兵配置。
  7. 智能优化算法:乌鸦搜索算法-附代码
  8. 十大经典算法及其优化
  9. 大数据、云计算和物联网三者的关系
  10. 集成谷歌地图不显示的问题
  11. 浅谈JavaScript面向对象编程(转自酷勤网)
  12. [论文笔记] ASFD 阅读笔记
  13. 7-14 设计一个风扇Fan类 (20 分)
  14. Word表格外的第一个空行如何删除
  15. Fedora修复grub2启动项grub rescue
  16. 【方法/函数】 矩阵相乘
  17. Android多语言切换(兼容安卓9、10)
  18. Cadence 计算器使用——settling time
  19. 【JAVA学习】1、零基础入门Java 基础语法:概念、规则、格式
  20. 【小练习】好玩游戏的物品清单

热门文章

  1. PHP json 类型
  2. spring boot 2.0采用com.mysql.cj.jdbc.Driver数据库驱动引发的系统时间不一致问题
  3. R语言直方图hist函数介绍(附源文档)
  4. 170613 逆向-CrackMe之023
  5. ITSS怎么样?对IT行业企业有何意义?
  6. ThinkPHP5 框架缺陷导致远程命令执行
  7. Excel表格渐变色的处理
  8. ps怎么制作流体_怎么用PS制作液化流体渐变海报
  9. DALL-E 人工智能的艺术家
  10. 不属于你的工作,你该不该做?