从最简单的窗体应用开始

73 阅读2分钟

窗体程序示例

看例子:

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();
    }
​
}
​

运行效果:

image.png

面向对象程序设计

思考题

思考题

  1. 该示例中使用了面向对象特性中的哪些?就代码举例说明。
  2. UML类设计的角度说说该示例中有哪几个类?类的关系是怎样的?

答案

  1. 该示例程序使用了面向对象中的继承和封装两大特性。GameMain类从JFrame继承,继承了窗体的外观和行为。在对窗体实例化时,通过继承的方法对窗体进行设置,而没有暴露出内部属性来赋值,这体现了封装性。

  2. 程序中设计三个类:GameMain主类、JFrame窗体类、JPanel面板类,抽象成类的设计,如下图:

image.png