1 Swing程序设计
1.1 Swing概述
Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。下面的HelloSwing.java程序介绍了如何创建一个窗口。
【HelloSwing.java】
package com.iot.summarize; //此包为java文件地址 import javax.swing.*; //导入javax.swing包是需要用到此包中的JFrame类 publicclass HelloSwing { publicstaticvoid main(String[] args) { JFrame frame = newJFrame(\); //声明一个标题为“Hello Swing”的JFrame窗体对象 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置frame窗体的关闭方式 frame.setResizable(false); //设置是否可以改变窗体大小 frame.setSize(300, 100); //设置窗体默认大小 frame.setVisible(true); //设置窗体是否可见 } }
HelloSwing.java运行结果
创建一个窗口就是这么简单,可以根据需求可以设定窗体的样式和属性等等。设置窗体的属性有很多方法,请参阅JDK文档。
1.2 布局管理器
布局管理器提供Swing组件安排展示在容器中的方法,它提供了基本的布局功能。使用布局管理器较程序员直接在容器中控制Swing组件的位置和大小要方便的很多,可以有效地处理整个窗体的布局。Swing提供的常用布局管理器包括流布局管理器、边界布局管理器和网格布局管理器。
流布局管理器
流布局管理器是面板的默认布局管理器,流布局管理器的行为跟文书处理程序的版面配置方式差不多,每个组件都会依照理想的大小呈现,并且会从左到右依照加入的顺序以可能会换行的方式排列,因此在组件放不下的时候会被放到下一行。下面的FlowLayoutDeo.java程序将介绍流布局管理器的设定。
【FlowLayoutDemo.java】
package com.iot.layout; //此包为java文件地址 import javax.swing.*; //导入javax.swing包是需要用到此包中的JFrame和JButton类 import java.awt.*; //导入java.awt包是需要此包中的Container类 publicclass FlowLayoutDemo { publicstaticvoid main(String[] args) { JFrame frame = newJFrame(\); // 声明一个标题为“FlowLayoutDemo”的JFrame窗体对象 Container con = frame.getContentPane(); // 创建一个容器,以便将按钮组件加到上面 frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new FlowLayout(FlowLayout.CENTER)); // 设置窗体的布局管理器为FlowLayout流布局管理器,其中参数代表组件的对齐方式 for (int i = 1; i <= 9; i++) con.add(new JButton(\ + i)); // 在容器中添加9个按钮 } }
FlowLayuotDemo.java运行结果
从运行结果可以看出当改变窗体的大小的时候按钮会很聪明的重组排列,还可以设置对齐方式,该程序用的是居中的对齐方式。
边界布局管理器
边界布局管理器是框架默认的布局管理器,它会把背景组件分割成5个区域,每个被管理的区域只能放上一个组件,由此管理员安置的组件通常不会取得默认的大小。下面的BorderLayoutDemo.java将介绍如何设置边界布局管理器。 【BorderLayoutDemo.java】
packagecom.iot.layout; import java.awt.*; import javax.swing.*; publicclass BorderLayoutDemo { publicstaticvoid main(String[] args) { JFrame frame = newJFrame(\); Container con = frame.getContentPane(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } frame.setVisible(true); frame.setLayout(new BorderLayout()); //设置窗体的布局管理器为BorderLayout边界布局管理器 //创建5个方位的按钮 JButton north = newJButton(\); JButton south = newJButton(\); JButton west = newJButton(\); JButton east = newJButton(\); JButton center = newJButton(\); con.add(north, BorderLayout.NORTH);//将按钮添加在管理器的北方 con.add(south, BorderLayout.SOUTH);//将按钮添加在管理器的南方 con.add(west, BorderLayout.WEST);//将按钮添加在管理器的西方 con.add(east, BorderLayout.EAST);//将按钮添加在管理器的东方 con.add(center, BorderLayout.CENTER);//将按钮添加在管理器的中间
BorderLayoutDemo.java运行结果
从结果可以看到每个区域的大小是根据按钮上的字而决定的,当周围4个区域都被占了只剩下中间区域的时候,中间的区域会随着窗体的大小会自动的左右拉伸。
网格布局管理器
网格布局管理器可以说是划分的最规范的一种布局管理器了,它会根据所在面板或容器的大小划分成若干个相同大小的子区域,我们可以设置管理器要划分的行数和列数。下面的GridLayoutDemo.java将介绍如何设置网格布局管理器。 【GridLayoutDemo.java】
package com.iot.layout; import java.awt.*; import javax.swing.*; publicclass GridLayoutDemo { publicstaticvoid main(String[] args) { JFrame frame = newJFrame(\); Container con = frame.getContentPane(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); frame.setLayout(new GridLayout(2,4,10,10)); //设置窗体的布局管理器为GridLayout网格布局管理器,传入的参数将容器划成2横行和4纵行并且水平和垂直间隔均为10 for(int i = 1;i<=7;i++){ con.add(new JButton(\+i)); //在8个小网格中依次添加7个按钮,最后一个网格将不添加 } } }
GridLayoutDemo.java运行结果
从运行结果可以看出,该容器被分成了2行4列,并且每个区域的大小都是一样的,同样我们还可以设置每个格子之间的水平和垂直的间隔,网格布局管理器看起来比较的整齐和规范。
盒式布局管理器
它就像FlowLayout一样让每个组件使用默认的大小,并且按照加入的顺序来排列。但盒式布局管理器是以垂直和水平的方向来排列,不像流布局管理器会自动地换行,它让你插入某种类似换行的机制来强制组件从新的一行开始排列。下面的BoxLayoutDemo.java将介绍如何设置盒式布局管理器。 【BoxLayoutDemo.java】
package com.iot.layout; import java.awt.*; import javax.swing.*; publicclass BoxLayoutDemo { publicstaticvoid main(String[] args) { JFrame frame = newJFrame(\); Container con = frame.getContentPane(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); frame.setLayout(new BoxLayout(con, BoxLayout.Y_AXIS)); //设置窗体的布局管理器为BoxLayout盒式布局管理器并以Y轴为对齐方式 //创建5个按钮 JButton north = newJButton(\); JButton south = newJButton(\); JButton west = newJButton(\); JButton east = newJButton(\); JButton center = newJButton(\); } } //依次将5个按钮加到容器上 con.add(north); con.add(south); con.add(west); con.add(east); con.add(center);
相关推荐: