很苦逼的是,每次想记录一个小程序,发现,要给别人讲清楚,总是得分很多模块讲解。
所以今天来讲下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); } }
时间: 2024-10-27 17:16:08