JAVA SWING 4中布局方式
布局窗口实验报告

一、实验目的通过本次实验,掌握Java Swing框架中常用的布局管理器,如FlowLayout、BorderLayout、GridLayout、GridBagLayout等,并学会如何使用这些布局管理器对窗口进行合理布局,提高GUI应用程序的界面设计能力。
二、实验环境1. 开发工具:Eclipse2. 开发语言:Java3. 环境配置:Java Development Kit(JDK)版本为1.8三、实验内容1. 流式布局(FlowLayout)2. 边界布局(BorderLayout)3. 网格布局(GridLayout)4. 网格袋布局(GridBagLayout)四、实验步骤1. 流式布局(FlowLayout)(1)创建一个窗口,并设置窗口标题为“FlowLayout”。
(2)在窗口中添加四个按钮,分别为“Button1”、“Button2”、“Button3”和“Button4”。
(3)设置窗口的布局管理器为FlowLayout。
(4)运行程序,观察窗口布局效果。
2. 边界布局(BorderLayout)(1)创建一个窗口,并设置窗口标题为“BorderLayout”。
(2)在窗口中添加四个标签,分别为“North”、“South”、“East”和“West”。
(3)设置窗口的布局管理器为BorderLayout。
(4)运行程序,观察窗口布局效果。
3. 网格布局(GridLayout)(1)创建一个窗口,并设置窗口标题为“GridLayout”。
(2)在窗口中添加四个按钮,分别为“Button1”、“Button2”、“Button3”和“Button4”。
(3)设置窗口的布局管理器为GridLayout,并设置每行和每列的组件数量为2。
(4)运行程序,观察窗口布局效果。
4. 网格袋布局(GridBagLayout)(1)创建一个窗口,并设置窗口标题为“GridBagLayout”。
JavaSwing介绍

JavaSwing介绍Swing 是⼀个为Java设计的GUI⼯具包。
Swing是JAVA基础类的⼀部分。
Swing包括了图形⽤户界⾯(GUI)器件如:⽂本框,按钮,分隔窗格和表。
Swing提供许多⽐AWT更好的屏幕显⽰元素。
它们⽤纯Java写成,所以同Java本⾝⼀样可以跨平台运⾏,这⼀点不像AWT。
它们是JFC的⼀部分。
它们⽀持可更换的⾯板和主题(各种操作系统默认的特有主题),然⽽不是真的使⽤原⽣平台提供的设备,⽽是仅仅在表⾯上模仿它们。
这意味着你可以在任意平台上使⽤JAVA⽀持的任意⾯板。
轻量级组件的缺点则是执⾏速度较慢,优点就是可以在所有平台上采⽤统⼀的⾏为。
Hello World 程序HelloWorldSwing.java ⽂件代码如下:1import javax.swing.*;2public class HelloWorldSwing {3/**{4 * 创建并显⽰GUI。
出于线程安全的考虑,5 * 这个⽅法在事件调⽤线程中调⽤。
6*/7private static void createAndShowGUI() {8// 确保⼀个漂亮的外观风格9 JFrame.setDefaultLookAndFeelDecorated(true);1011// 创建及设置窗⼝12 JFrame frame = new JFrame("HelloWorldSwing");13 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);1415// 添加 "Hello World" 标签16 JLabel label = new JLabel("Hello World");17 frame.getContentPane().add(label);1819// 显⽰窗⼝20 frame.pack();21 frame.setVisible(true);22 }2324public static void main(String[] args) {25// 显⽰应⽤ GUI26 javax.swing.SwingUtilities.invokeLater(new Runnable() {27public void run() {28 createAndShowGUI();29 }30 });31 }32 }执⾏以下命令输出结果:$ javac HelloWorldSwing.java$ java HelloWorldSwing⼀个⽤户登录框实例SwingLoginExample.java ⽂件代码如下:1import javax.swing.JButton;2import javax.swing.JFrame;3import javax.swing.JLabel;4import javax.swing.JPanel;5import javax.swing.JPasswordField;6import javax.swing.JTextField;7public class SwingLoginExample {89public static void main(String[] args) {10// 创建 JFrame 实例11 JFrame frame = new JFrame("Login Example");12// Setting the width and height of frame13 frame.setSize(350, 200);14 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);1516/* 创建⾯板,这个类似于 HTML 的 div 标签17 * 我们可以创建多个⾯板并在 JFrame 中指定位置18 * ⾯板中我们可以添加⽂本字段,按钮及其他组件。
java中Swing的GridBagLayout使用简介

java中Swing的GridBagLayout使⽤简介⼀、GridBagLayout 布局管理器以及其GridBagConstraints布局参数详解GridBagLayout主要使⽤到以下4个参数:columnWidths:设置列数;例如:gridBagLayout.columnWidths = new int[]{0}; 表⽰只有⼀列rowHeights:设置⾏数;例如:gridBagLayout.rowHeights = new int[]{0, 0}; 表⽰总共有2⾏columnWeights:设置各列所占宽度⽐例;gridBagLayout.columnWeights = new double[]{1.0}; 表⽰,列的宽度为容器的宽度,即撑满容器rowWeights:设置各⾏所占的⾼度⽐例;gridBagLayout.rowWeights = new double[]{0.2,0.8};;表⽰第⼀⾏的⾼度只占容器⾼度的2分,第⼆⾏的⾼度占容器的8份GridBagContraints壳设置的参数如下:在使⽤GridBagLayout布局⽅式之前,需要了解下⾯的参数:例如如下代码:public class ClientPanel extends JPanel {/*** Create the panel.*/public ClientPanel() {GridBagLayout gridBagLayout = new GridBagLayout();gridBagLayout.columnWidths = new int[]{0}; //设置了总共有⼀列gridBagLayout.rowHeights = new int[]{0, 0}; //设置了总共有2⾏gridBagLayout.columnWeights = new double[]{1.0}; //设置了列的宽度为容器宽度gridBagLayout.rowWeights = new double[]{0.2,0.8}; //第⼀⾏的⾼度占了容器的2份,第⼆⾏的⾼度占了容器的8份setLayout(gridBagLayout);JPanel panel = new JPanel();panel.setBackground(Color.PINK);GridBagConstraints gbc_panel = new GridBagConstraints();gbc_panel.insets = new Insets(0, 0, 5, 0);gbc_panel.fill = GridBagConstraints.BOTH;gbc_panel.gridx = 0;gbc_panel.gridy = 0;add(panel, gbc_panel);JPanel panel_1 = new JPanel();panel_1.setBackground(Color.ORANGE);GridBagConstraints gbc_panel_1 = new GridBagConstraints();gbc_panel_1.fill = GridBagConstraints.BOTH;gbc_panel_1.gridx = 0;gbc_panel_1.gridy = 1;add(panel_1, gbc_panel_1);}}运⾏结果如下:以下代码:public class ClientPanel extends JPanel {/*** Create the panel.*/public ClientPanel() {GridBagLayout gridBagLayout = new GridBagLayout();gridBagLayout.columnWidths = new int[]{0, 0, 0,0}; //设置了4列gridBagLayout.rowHeights = new int[]{0, 0}; //设置了2⾏gridBagLayout.columnWeights = new double[]{0.25,0.25,0.25,0.25}; gridBagLayout.rowWeights = new double[]{0.2,0.8};setLayout(gridBagLayout);JPanel panel = new JPanel();panel.setBackground(Color.PINK);GridBagConstraints gbc_panel = new GridBagConstraints();gbc_panel.insets = new Insets(0, 0, 5, 0);gbc_panel.fill = GridBagConstraints.BOTH;gbc_panel.gridx = 3;gbc_panel.gridy = 0;add(panel, gbc_panel);JPanel panel_1 = new JPanel();panel_1.setBackground(Color.ORANGE);GridBagConstraints gbc_panel_1 = new GridBagConstraints();gbc_panel_1.insets = new Insets(0, 0, 0, 5);gbc_panel_1.fill = GridBagConstraints.BOTH;gbc_panel_1.gridx = 0;gbc_panel_1.gridy = 1;add(panel_1, gbc_panel_1);}}运⾏结果为:。
java设置组件位置的方法

java设置组件位置的方法
在Java的Swing库中,可以使用各种方法来设置组件的位置。
以下是一些常见的方法:
1. `setBounds(int x, int y, int width, int height)`: 这个方法可以设置组件的位置和大小。
x和y参数定义了组件左上角的位置,width和height参数定义了组件的宽度和高度。
```java
(50, 50, 200, 200);
```
2. `setLocation(int x, int y)`: 这个方法可以设置组件的位置。
x和y参数定义了组件左上角的位置。
```java
(50, 50);
```
3. `setLayout(LayoutManager layout)`: 这个方法可以设置组件的布局管
理器。
布局管理器决定了组件如何在容器中定位。
```java
(new FlowLayout());
```
4. `setPreferredSize(Dimension size)`: 这个方法可以设置组件的首选大小。
首选大小用于计算布局。
```java
(new Dimension(200, 200));
```
5. `pack()`: 这个方法用于调整窗口大小以适应其内容。
它会自动调整窗口的大小,使其恰好能容纳其子组件。
请注意,使用`setBounds()`方法设置的组件位置和大小是在绝对布局中使
用的,也就是说,它们不依赖于布局管理器。
而使用`setLayout()`方法设置的布局管理器则决定了组件如何在容器中定位。
gridbagconstraints 参数

GridBagConstraints是Java Swing 组件用于控制组件在GridBagLayout 中的布局参数。
以下是一些常用的GridBagConstraints参数及其描述:1.fill:1.GridBagConstraints.NONE:不填充。
2.GridBagConstraints.HORIZONTAL:水平填充。
3.GridBagConstraints.VERTICAL:垂直填充。
4.GridBagConstraints.BOTH:水平和垂直填充。
2.anchor:1.用于确定组件在其单元格中的位置。
例如,GridBagConstraints.WEST将组件定位在单元格的左侧。
3.gridx和gridy:1.定义组件的行和列位置。
通常从0开始。
4.insets:1.用于设置组件与其单元格边缘之间的空间。
它是一个Inset 对象,包含上、右、下和左边的空间。
5.ipady和ipadx:1.分别用于垂直和水平方向上的内部填充。
这可以增加组件的实际大小,但不会影响其首选大小。
6.weightx和weighty:1.用于确定当窗口大小调整时,组件如何调整其大小。
值越高,组件在调整大小时将变得更大。
ponent: GridBagConstraint (如GridBagConstraints c = newGridBagConstraints();). 通常与其他参数一起使用来配置一个或多个组件。
8.iplpadx和iplpady: 这些是用来调整内部填充的像素单位值,与ipady和ipadx类似,但使用像素单位而不是比例单位。
9.ipady2: 这是一个新的属性,用于在垂直方向上为组件提供额外的内部填充。
10.padx和pady: 这些属性允许您在组件的四个角上添加填充。
这类似于在每个角上添加小的矩形,从而为组件提供一些额外的空间。
11.gridwidth和gridheight: 这些属性允许您定义单元格的宽度和高度。
JavaGUI布局管理器

JavaGUI布局管理器容器可设置布局管理器,管理容器中组件的布局:container.setLayout(new XxxLayout());Java有6种布局管理器,AWT提供了5种:FlowLayoutBorderLayoutGridLayoutGridBagLayoutCradLayoutSwing还提供了⼀种:BoxLayout1、FlowLayout 流式布局顾名思义,组件像⽔流⼀样,从第⼀⾏开始,从左向右依次排列,碰到边界时转到下⼀⾏继续。
三个构造函数:FlowLayout() //使⽤默认参数FlowLayout(int align) //设置对齐⽅式FlowLayout(int align,int hgap,int vgap) //设置对齐⽅式、⽔平间距、垂直间距align是FlowLayout类的常量,⽐如:FlowLayout.LEFT,FlowLayout.CENTER2、BorderLayout 边界布局将容器划分为EAST、WEST、SOUTH、NORTH、CENTER五个部分,每个部分可放置⼀个组件。
2个构造函数:BorderLayout() //使⽤默认参数BorderLayout(int hgap,int vgap) //设置⽔平间距、垂直间距放置组件时需指定位置:container.add(Component comp, Borderlayout.SOUTH); //第⼆个参数是BorderLayout类的常量,指定组件位置container.add(Component comp); //缺省位置时,默认为BorderLayout.CENTER,放在中间⼀共5个位置,⼀个位置最多放1个组件。
当然,可以在⼀个位置放置多个组件,只是后放置的组件会覆盖之前放置的组件。
也可以⼀个都不放。
3、GridLayout ⽹格布局将容器划分为指定⾏数、列数的⽹格,每个格⼦的尺⼨都相同,⼀个格⼦中放置⼀个组件,适合组件⼤⼩差不多的,⽐如放置计算器的按钮。
JAVA图形界面各种布局及使用方法

1.布局对于JFrame窗口,默认布局是BorderLayout布局。
对于JPanel,默认布局是FlowLayout布局。
容器可以使用方法:setLayout(布局对象);来设置自己的布局。
(1)FlowLayout布局FlowLayout类创建的对象称做FlowLayout型布局。
FlowLayout类的一个常用构造方法如下:FlowLayout()该构造方法可以创建一个居中对齐的布局对象。
例如:FlowLayout flow=new FlowLayout();如果一个容器con使用这个布局对象:con.setLayout(flow);那么,con可以使用Container类提供的add方法将组件顺序地添加到容器中,组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列。
FlowLayout布局对象调用flow.setAlignment(FlowLayout.LEFT);来设置组件靠左对齐FlowLayout布局对象调用setHgap(int hgap) 方法和setVgap(int vgap)可以重新设置布局的水平间隙和垂直间隙。
(2)BorderLayout布局BorderLayout 布局是Window型容器的默认布局,例如JFrame、JDialog都是Window类的间接子类,它们的默认布局都是BorderLayout 布局。
容器使用BorderLayout 布局,那么容器空间简单地划分为东、西、南、北、中五个区域。
每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示.添加到某个区域的组件将占据整个这个区域。
每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换掉。
(3)CardLayout 布局使用CardLayout 的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,这个被显示的组件将占据所有的容器空间。
JavaSwing图形用户界面的设计与实现方法

JavaSwing图形用户界面的设计与实现方法一、引言随着计算机技术的不断发展,图形用户界面(Graphical User Interface,GUI)在软件开发中扮演着越来越重要的角色。
作为用户与软件之间的沟通桥梁,GUI的设计与实现至关重要。
本文将介绍JavaSwing图形用户界面的设计与实现方法,帮助开发人员更好地利用JavaSwing创建出功能强大、用户友好的GUI界面。
二、Swing概述JavaSwing是Java提供的一套GUI组件库,它基于Java AWT (Abstract Window Toolkit)构建而成,相对于AWT,Swing提供了更加丰富的组件和更高的灵活性。
Swing拥有独立于平台的外观,通过Java代码实现GUI界面的构建和事件处理。
使用Swing可以快速实现各种界面风格,并且易于调整和扩展。
三、Swing组件的使用1. 容器类组件:容器类组件是其他组件的父容器,对应于应用程序的窗口或面板,常用的容器类组件有JFrame、JPanel、JDialog等。
通过创建容器类组件,可以将其他组件添加到容器中并管理和布局。
2. 基本组件:基本组件是构建GUI界面的基本元素,常用的基本组件有JButton、JLabel、JTextField等。
它们可以用于实现用户输入、数据展示、按钮点击等交互操作。
3. 高级组件:高级组件是Swing提供的一些特殊功能的组件,如JTable、JTree、JFileChooser等。
它们可以用于展示表格、树状结构、文件选择等复杂的用户交互功能。
四、事件处理为了响应用户的操作,GUI界面需要进行事件处理。
在JavaSwing中,事件处理分为两个阶段:事件生成和事件响应。
当用户与界面进行交互时,会生成相应的事件,如按钮点击、鼠标移动等。
开发人员需要实现事件的监听器,并在事件发生时触发相应的操作。
五、界面布局界面布局是指组件在容器中的排列方式。
在Swing中,界面布局主要通过布局管理器(Layout Manager)实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建一个新的流布局管理器,它具有指定的对齐方式以及指定的水 平和垂直间隙。
方法摘要
void
addLayoutComponent(String name, Component comp) addLayoutComponent 将指定的组件添加到布局中。 getAlignment() getAlignment 获取此布局的对齐方式。 getAlignOnBaseline() getAlignOnBaseline 如果组件将沿其基线垂直对齐,则返回 true。 getHgap() getHgap 获取组件之间以及组件与 Container 的边之间的水平间 隙。
构造方法摘要
BorderLayout() BorderLayout 构造一个组件之间没有间距的新边框布局。 BorderLayout(int hgap, int vgap) BorderLayout 构造一个具有指定组件间距的边框布局。
方法摘要
void
addLayoutComponent(Component comp, Object constraints) addLayoutComponent 使用指定的约束对象将指定组件添加到布局中。 addLayoutComponent(String name, Component comp) addLayoutComponent 已过时。 已过时。 由 addLayoutComponent(Component, Object)
float
float
Component getLayoutComponent getLayoutComponent(Container target, Object constraints)
Component getLayoutComponent getLayoutComponent(Object constraints)
void
void
void
void
隙。
String
toString() toString 返回此 FlowLayout 对象及其值的字符串表示形式。
ng.Object 从类 ng.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
void
void
Dimension maximumLayoutSize maximumLayoutSize(Container target)
Dimension minimumLayoutSize minimumLayoutSize(Container target)
使用此布局管理器确定 target 容器的最小大小。
2、边框布局 BorderLayout
java.awt
类 BorderLayout
ng.Object java.awt.BorderLayout 所有已实现的接口: 所有已实现的接口: LayoutManager, LayoutManager2, Serializable
字段摘要
static String AFTER_LAST_LINE
Dimension minimumLayoutSize minimumLayoutSize(Container target)
Dimension preferredLayoutSize preferredLayoutSize(Container target)
给出指定目标容器中的 visible 组件,返回此布局的首 选维数。
static int LEADING
此值指示每一行组件都应该与容器方向的开始边对齐, 例 如,对于从左到右的方向,则与左边对齐。
static int LEFT
此值指示每一行组件都应该是左对齐的。
static int RIGHT
此值指示每一行组件都应该是右对齐的。
static int TRAILING
int
boolean
int
int
getVgap() getVgap 获取组件之间以及组件与 Container 的边之间的垂直间 隙。
void
layoutContainer(Container target) layoutContainer 布置该容器。 返回需要布置 visible 组件的最小维数,该组件包含在 指定的目标容器中。
使用此网格布局确定容器参数的首选大小。
void
removeLayoutComponent(Component comp) removeLayoutComponent 从布局移除指定组件。 setColumns(int cols) setColumns 将此布局中的列数设置为指定值。 setHgap(int hgap) setHgap 将组件之间的水平间距设置为指定值。 setRows(int rows) setRows 将此布局中的行数设置为指定值。 setVgap(int vgap) setVgap 将组件之间的垂直间距设置为指定值。 toString() toString 返回此网格布局的值的字符串表示形式。
static String CENTER
中间区域的布局约束(容器中央)。
static String EAST
东区域的布局约束(容器右边)。
static String LINE_END
组件出现在布局的行方向的结尾处。
static String LINE_START
组件出现在布局的行方向的开始处。
static String NORTH
方法摘要
void
addLayoutComponent(String name, Component comp) addLayoutComponent 将具有指定名称的指定组件添加到布局。 getColumns() getColumns 获取此布局中的列数。 getHgap() getHgap 获取组件之间的水平间距。 getRows() getRows
Dimension preferredLayoutSize preferredLayoutSize(Container target)
基于容器中的组件,使用此布局管理器确定 target 容器 的首选大小。
void
removeLayoutComponent(Component comp) removeLayoutComponent 从此边框布局中移除指定组件。 setHgap(int hgap) setHgap 设置组件之间的水平间距。 setVgap(int vgap) setVgap 设置组件之间的垂直间距。 toString() toString 返回此边框布局的状态的字符串表示形式。
与 PAGE_END 同义。
static String AFTER_LINE_ENDS
与 LINE_END 同义。
static String BEFORE_FIRST_LINE
与 PAGE_START 同义。
static String BEFORE_LINE_BEGINS
与 LINE_START 同义。
void
void
String
ng.Object 从类 ng.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
3、网格布局 GridLayout 网格布局
java.awt
类 GridLayout
ng.Object java.awt.GridLayout 所有已实现的接口: 所有已实现的接口: LayoutManager, Serializable
构造方法摘要
GridLayout() GridLayout 创建具有默认值的网格布局,即每个组件占据一行一列。 GridLayout(int rows, int cols) GridLayout 创建具有指定行数和列数的网格布局。 GridLayout(int rows, int cols, int hgap, int vgap) GridLayout 创建具有指定行数和列数的网格布局。
此值指示每行组件都应该与容器方向的结束边对齐,例 如,对于从左到右的方向,则与右边对齐。
构造方法摘要
FlowLayout() FlowLayout 构造一个新的 FlowLayout,它是居中对齐的,默认的水平和垂直间 隙是 5 个单位。 FlowLayout(int align) FlowLayout 构造一个新的 FlowLayout,它具有指定的对齐方式,默认的水平和 垂直间隙是 5 个单位。 FlowLayout(int align, int hgap, int vgap) FlowLayout
void
removeLayoutComponent(Component comp) removeLayoutComponent 从布局中移除指定的组件。 setAlignment(int align) setAlignment 设置此布局的对齐方式。 setAlignOnBaseline(boolean alignOnBaseline) setAlignOnBaseline 设置组件是否应该沿着其基线垂直对齐。 setHgap(int hgap) setHgap 设置组件之间以及组件与 Container 的边之间的水平间 隙。 setVgap(int vgap) setVgap 设置组件之间以及组件与 Container 的边之间的垂直间
获取使用给定约束添加的组件。
int
getVgap() getVgap 返回组件之间的垂直间距。 invalidateLayout(Container target) invalidateLayout 使布局无效,指示如果布局管理器缓存了信息,则应该将 其丢弃。 layoutContainer(Container target) layoutContainer 使用此边框布局对容器参数进行布局。 在给出指定目标容器中的组件的前提下,返回此布局的最 大尺寸。