Java图形界面描绘的基本实现方法
Java图形界面的实现主要是引用java.awt包和javax.swing包中的类。AWT是基于本地操作系统的C/C++程序,其运行速度比较快;Swing是基于AWT的Java程序,其运行速度比较慢,但是对AWT的功能有很大的扩充,并且跨平台表现更好。在运行速度不是至关重要因素的桌面应用系统中,我们主要用swing包中的组件。
Java图形界面简要的实现方法如下。
(1)创建一个顶层容器类的对象,用来容纳其他要呈现的组件。(最常用的作为顶层容器的类是JFrame,它就是常见的窗口,见图1.6.1。)
图1.6.1 JFrame对象的呈现效果
要呈现这样一个窗口,主要需要下面三步:
(2)如果要由若干个组件组合成程序的界面,那么就需要创建各个组件对象,然后加入窗口。例如,在窗口中加入两个按钮,见图1.6.2(这种界面的代码实现,在第8章项目中用到的时候,我们再来学习)。
图1.6.2 JFrame对象中有两个按钮对象的呈现效果
当前程序的需求是在窗口中描绘出彩色的星星。在Java中,各种组件上都可以进行描绘。我们这里用JPanel(面板)类来进行描绘。首先定义一个面板类,这个面板类是按照程序员的意愿“定制”描绘的,然后创建这个面板类的对象,将这个对象加入窗口。
自定义一个面板类时,要想让这个类具有“画布”的功能,并且可以添加窗口并将窗口呈现出来,需要用到类的继承技术,让自定义的面板类继承JPanel类(在定义类的头部加入extends JPanel),这样自定义面板类就具有了父类JPanel的所有特征,见代码6.1的第19行。
自定义面板类除了继承JPanel类的特征外,还需要定制描绘的内容。按照应用编程接口,在面板类中描绘的内容必须写在方法public void paint(Graphics g){}中,这是重写了父类的paint()方法,方法头部的定义除了参数名g可以改变外,其他都不能改变。这个方法的参数g的类型是Graphics,g可以理解为面板类上用来描绘的“画笔”对象。所有和描绘相关的方法都来自Graphics类,见代码6.1的第20行。
当面板类对象加入窗口,并由窗口呈现出来的时候,窗口中的面板类就会自动调用paint(),描绘出面板类中的内容。注意不要通过显式地调用paint()方法来描绘面板类。
【代码6.1】图形描绘案例
在图形界面中,所有长度和坐标的默认单位是象素点。
底层类库已经实现了JFrame、JPanel、Graphics的功能,我们只需要按照应用编程接口(API),将自己写的代码和底层已经实现的部分结合在一起,就可以实现当前应用程序需要的功能。
按照应用编程接口引用类库中现成的类就可以实现复杂功能的软件,这就是程序员在开发软件时重要的工作方式。