为Java GUI程序设计而设计的API是应用面向对象原理的绝佳范例。
介绍Java的时候,将图形用户界面相关的类捆绑在一起,放在一个称为抽象窗口工具箱(Abstract Window Toolkit,AWT)的库中。AWT适合开发简单的图形用户界面但并不适合开发复杂的GUI项目。除此之外,AWT更容易发生与特定平台相关的故障。
AWT的用户界面组件就被一种更稳定、更通用和更灵活的库取代,这种库称为Swing组件库。Swing组件更少地依赖于目标平台并且更少地使用自己的GUI资源。
因此,不依赖于自己的GUI的Swing组件称为轻量级组件,而AWT组件称为重量级组件。
GUI API包含的类可以分为三个组:组件类、容器类、和辅助类。
1)组件类是用来创建用户界面的
2)容器类是用来包含其他组件的
3)辅助类是用来支持GUI组件的
创建一个用户界面需要创建一个框架或一个applet来存放用户界面组件。
1)创建一个框架
使用JFrame类创建一个框架:
MyFrame.java import javax.swing.JFrame; public class MyFrame { public static void main(String[] args) { JFrame frame = JFrame("MyFrame");//Create a frame frame.setSize(400,300);//Set the size frame.setLocationRelativeTo(null);//Center a frame frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);//Display the frame } }
2)向框架中添加组件
可以使用add方法在框架中添加组件。
MyFrameWithComponents.java import javax.swing.*; public class MyFrameWithComponents { public static void main(String[] args) { JFrame frame = new JFrame("MyFrameWithComponents"); //Add a button into the frame JButton jbtOK = new JButton("OK"); frame.add(jbtOK); frame.setSize(400,300);//Set the size frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null);//Center a frame frame.setVisible(true); } }
每个JFrame都包含一个内容窗格。
在许多其他窗口系统中,用户界面组件是通过使用硬编码的像素度量管理的。
三种基本布局管理器:FlowLayout、GridLayout、BorderLayout。
1)FlowLayout
FlowLayout是最简单的布局管理器。按照组件添加的顺序,从左到右地将组件排列在容器中。当放满一行时,就开始新的一行。可以使用三个常量FlowLayout.RIGHT、FlowLayout.CENTER和FlowLayout.LEFT之一来指定组价的对齐方式。还可以指定组件之间以像素为单位的间隔。
2)GridLayout
GridLayout管理器以网络(矩阵)的形式管理组件。组件按照它们添加的顺序从左到右排列,先是第一行,接着是第二行,以此类推。
可以指定网络中的行数和列数。基本规则如下:
① 行数和列数可以为零,但不能两者都为零。如果一个为零另一个不为零,那么不为零的行或列的大小已经固定,而为零的行或列的大小由布局管理器动态地决定。
②如果行数和列数都不为零,那么行数就是主导参数;也就是说,行数是固定的,布局管理器会动态地计算列数。
3)BorderLayout
BorderLayout管理器将容器分为五个区域:东区、南区、西区、北区和中央。
组件根据它们最适合的尺寸和它们在容器中的位置来放置。南、北组件可以水平拉伸;东、西组件可以垂直拉伸;中央组件既可以水平拉伸也可以竖直拉伸以填充空白空间。
图标是一个大小固定的图片;通常情况下它都比较小,用来装饰组件。图像通常用来存储在图像文件中。Java目前支持三种图像格式:GIF(图像交换格式)、JPEG(联合图像专家组)、以及PNG(便携网络图片)。这些类型的图像文件名分别以.gif、.jpg和.png结尾。
Color类
可以使用java.awt.Color类为GUI组件设置颜色。
Font类
可以使用java.awt.Font类创建一种字体。