窗体程序示例
看例子:
package com.juan.java.tankbattle;
import ...
/**
* 从JFrame窗体类继承,具有窗体的行为
* */
public class GameMain extends JFrame {
/**
* 无参构造器,对窗体对象做基本的初始化设置
* */
public GameMain() {
// 设置窗口的标题
setTitle("坦克大战1.0");
// 设置窗口背景色为黑色
setBackground(Color.BLACK);
// 设置窗口不可拖动来改变大小
setResizable(false);
// 设置程序启动后,窗口弹出可见,同时开启后台线程来对图形化界面渲染和事件交互的监听
setVisible(true);
// 创建一个面板组件,用于后期游戏画面的绘制
JPanel panel = new JPanel();
// 将面板组件添加到窗口对象的内容面板中,放置在默认的布局位置中
getContentPane().add(panel);
// -------- 设置面板组件的外观 --------
// 设置面板亮灰色背景
panel.setBackground(Color.lightGray);
// 设置面板的宽高(像素单位)
panel.setPreferredSize(new Dimension(320, 240));
// 让整个窗口包住游戏面板,也就是,窗体的尺寸刚好为面板的大小
pack();
// 让窗口显示在屏幕正中间
setLocationRelativeTo(null);
// 给窗口添加一个监听器,监听窗口关闭时手动退出主线程
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.out.println("程序结束");
// 手动退出主线程,参数值0代表正常退出,而1代表异常情况退出
System.exit(0);
}
});
}
public static void main(String[] args) {
// 创建窗口对象,并进行窗口的初始化
new GameMain();
}
}
运行效果:
面向对象程序设计
思考题
思考题
- 该示例中使用了面向对象特性中的哪些?就代码举例说明。
- 从
UML
类设计的角度说说该示例中有哪几个类?类的关系是怎样的?
答案
-
该示例程序使用了面向对象中的继承和封装两大特性。
GameMain
类从JFrame
继承,继承了窗体的外观和行为。在对窗体实例化时,通过继承的方法对窗体进行设置,而没有暴露出内部属性来赋值,这体现了封装性。 -
程序中设计三个类:
GameMain
主类、JFrame
窗体类、JPanel
面板类,抽象成类的设计,如下图: