Java.Swing基础篇三部曲二(布局管理)
2021/12/6 22:19:51
本文主要是介绍Java.Swing基础篇三部曲二(布局管理),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
FlowLayout布局管理器
布局特点
- 对组件逐行定位,行内从左到右,一行排满之后换行。
- 默认对齐方式为居中对齐。
- 不改变组件的大小,按组件原有尺寸显示组件。
- FlowLayout是Panel类的默认布局管理器。
说明
可在构造方法中设置不同的组件间距,行距即对齐方式。
-
JPanel panel=new JPanel(new FlowLayout(FlowLayout.RIGHT,20,40));
右对齐,组件之间水平间距20个像素,数值间距40个像素
-
JPanel panel=new JPanel(new FlowLayout(FlowLayout.LEFT));
左对齐,水平和竖直间距为缺省值(默认值)5
-
JPanel panel=new JPanel(new FlowLayout());
默认方式,居中对齐,水平和竖直间距值均为默认值5
代码展示
import javax.swing.*; import java.awt.*; public class TestFlowLayout extends JFrame { /**首先定义8个按钮用来测试*/ JButton[] jButtons=new JButton[8]; /**关于布局的定义方法有很多,这里展示最常见的一种方法*/ JPanel panel=new JPanel(new FlowLayout()); public TestFlowLayout(){ for (int i=0;i<jButtons.length;i++){ jButtons[i]=new JButton("按钮"+i); panel.add(jButtons[i]); } this.add(panel); this.setTitle("流式布局测试"); this.setSize(400,300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args){ new TestFlowLayout(); } }
BorderLayout布局管理器
布局特点
- BorderLayout将整个容器布局划分成东南西北中,五个区域,组件智能被添加到指定的区域。
- 如不指定加入部位,则默认加入到Center区域。
- 每个区域只能加入一个,如果加入多个,则先前的组件会被遗弃。
- BorderLayout是Frame类的默认布局管理器。
说明
代码展示
import javax.swing.*; import java.awt.*; public class TestBorderLayout { public static void main(String[] args) { JFrame jf = new JFrame("BorderLayout测试管理"); jf.setSize(350, 250); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 创建内容面包容器,指定使用 边界布局 JPanel panel = new JPanel(new java.awt.BorderLayout()); JButton btnN = new JButton("North"); JButton btnS = new JButton("South"); JButton btnW = new JButton("West"); JButton btnE = new JButton("East"); JButton btnC = new JButton("Center"); // 把 5 个按钮添加到容器中的 5 个方位,注意后面的一定要大写 panel.add(btnN, java.awt.BorderLayout.NORTH); panel.add(btnS, java.awt.BorderLayout.SOUTH); panel.add(btnW, java.awt.BorderLayout.WEST); panel.add(btnE, java.awt.BorderLayout.EAST); panel.add(btnC, java.awt.BorderLayout.CENTER); jf.setContentPane(panel); jf.setLocationRelativeTo(null); jf.setVisible(true); } }
GridLayout布局管理器
布局特点
- GridLayout型布局管理器将布局划分成规则的矩形网络,每一个单元格区域大小相等。
- 组件被添加到每一个单元格中,从左向右填满一行后换行,在从上往下。
- 在GridLayout构造方法中指定分割的行数和列数。
说明
代码展示
import javax.swing.*; import java.awt.*; public class TestGridLayout extends JFrame { /**首先定义8个按钮用来测试*/ JButton[] jButtons=new JButton[8]; /**关于布局的定义方法有很多,这里展示最常见的一种方法*/ JPanel panel=new JPanel(new GridLayout(2,4)); public TestGridLayout(){ for (int i=0;i<jButtons.length;i++){ jButtons[i]=new JButton("按钮"+i); panel.add(jButtons[i]); } this.add(panel); this.setTitle("表格布局测试"); this.setSize(400,300); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.setVisible(true); } public static void main(String[] args){ new TestGridLayout(); } }
其他布局管理说明
布局名称 | 说明 | 注意 |
---|---|---|
CardLayout | 能够帮助用户处理两个以致更多的成员共享同一显示空间,就好像一叠卡片叠在一起。 | 在一张卡片中只能显示一个组件,因此可以使用容器嵌套的方法显示多个组件 |
GridBagLayout | 最灵活,最复杂的布局管理器,各组件所占空间可以不相同且灵活规定 | |
绝对布局 | 流程:
|
其他布局代码示例
CardLayout代码
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class TestCardLayout { public static void main(String[] args) { JFrame jf = new JFrame("卡片布局"); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); jf.setSize(300, 200); // 创建卡片布局,卡片间水平和竖直间隔为 10 final java.awt.CardLayout layout = new java.awt.CardLayout(10, 10); // 创建内容面板容器,指定布局管理器 final JPanel panel = new JPanel(layout); JButton btn01 = new JButton("哈哈"); JButton btn02 = new JButton("嘿嘿"); JButton btn03 = new JButton("呼呼"); panel.add(btn01, "btn01"); panel.add(btn02, "btn02"); panel.add(btn03, "btn03"); // 先显示第二个 layout.show(panel, "btn02"); jf.setContentPane(panel); jf.setLocationRelativeTo(null); jf.setVisible(true); // 每间隔2秒切换显示下一个 new Timer(2000, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { layout.next(panel); } }).start(); } }
GridBagLayout布局代码
import javax.swing.*; import java.awt.*; public class GridBagLayout { public static void main(String[] args) { JFrame jf = new JFrame("测试窗口"); jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); java.awt.GridBagLayout gridBag = new java.awt.GridBagLayout(); GridBagConstraints c = null; // 约束 JPanel panel = new JPanel(gridBag); JButton btn01 = new JButton("1"); JButton btn02 = new JButton("2"); JButton btn03 = new JButton("3"); JButton btn04 = new JButton("4"); JButton btn05 = new JButton("5"); JButton btn06 = new JButton("6"); JButton btn07 = new JButton("7"); JButton btn08 = new JButton("8"); JButton btn09 = new JButton("9"); JButton btn10 = new JButton("0"); /* 添加 组件 和 约束 到 布局管理器 */ // Button01 c = new GridBagConstraints(); gridBag.addLayoutComponent(btn01, c); // 内部使用的仅是 c 的副本 // Button02 c = new GridBagConstraints(); gridBag.addLayoutComponent(btn02, c); // Button03 c = new GridBagConstraints(); gridBag.addLayoutComponent(btn03, c); // Button04 显示区域占满当前行剩余空间(换行),组件填充显示区域 c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.BOTH; gridBag.addLayoutComponent(btn04, c); // Button05 显示区域独占一行(换行),组件填充显示区域 c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.BOTH; gridBag.addLayoutComponent(btn05, c); // Button06 显示区域占到当前尾倒车第二个单元格(下一个组件后需要手动换行),组件填充显示区域 c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.RELATIVE; c.fill = GridBagConstraints.BOTH; gridBag.addLayoutComponent(btn06, c); // Button07 放置在当前行最后一个单元格(换行) c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; gridBag.addLayoutComponent(btn07, c); // Button08 显示区域占两列,组件填充显示区域 c = new GridBagConstraints(); c.gridheight = 2; c.fill = GridBagConstraints.BOTH; gridBag.addLayoutComponent(btn08, c); // Button09 显示区域占满当前行剩余空间(换行),组件填充显示区域 c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.BOTH; gridBag.addLayoutComponent(btn09, c); // Button10 显示区域占满当前行剩余空间(换行),组件填充显示区域 c = new GridBagConstraints(); c.gridwidth = GridBagConstraints.REMAINDER; c.fill = GridBagConstraints.BOTH; gridBag.addLayoutComponent(btn10, c); /* 添加 组件 到 内容面板 */ panel.add(btn01); panel.add(btn02); panel.add(btn03); panel.add(btn04); panel.add(btn05); panel.add(btn06); panel.add(btn07); panel.add(btn08); panel.add(btn09); panel.add(btn10); jf.setContentPane(panel); //自动调整大小 jf.pack(); jf.setLocationRelativeTo(null); jf.setVisible(true); } }
这篇关于Java.Swing基础篇三部曲二(布局管理)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南