GUI绘图技术(已经明白的可以直接跳过进入下一部分或者温习一下):
要制作一个坦克游戏的第一步,应该就是制作一个窗口!而Java中制作窗口的方式很多,在这里我们选取JFrame。
第一步:如何制作一个窗口(最简易的制作窗口)
1 /**
2 * 目的:学习如何创建一个窗口
3 * @author HP
4 *
5 */
6 public class Test01 extends JFrame{
7 //主函数
8 public static void main (String[] args) {
9 new Test01();
10 }
11
12 //构造方法初始化
13 public Test01 () {
14 this.setSize(400,300); 15 this.setVisible(true); 16 } 17 }
代码讲解:
在这里,我们采用了继承JFrame类的方法来创建窗口,Test01继承了JFrame类,那么,也就是一个窗口类的子类。我们给它定义一个概念那就是,它应该也是一个窗口类哦。虽然名字和窗口类好像没什么关系。但事实上它继承了JFrame的所有方法和属性。
关于问题: 这里的问题是我认为,也是我自己在做这个项目,写这些代码所出现的疑惑,如若你有不同的疑惑,也可以自己深入探究,或者留言询问我,如果我能够解答,那么我很乐意帮助你!
问题1 : 为何不直接在这个类中主函数中创建一个窗口对象进而创建一个窗口,而要采用继承之后再创建的“笨方法”呢?
因为我们并不能修改JFrame类中的代码,故而,我们也就不能再窗口类中增添我们各种各样的特性来满足我们对于窗口类的要求了,所以我们使用一个 我的窗口 MyFrame 的类(在这里也就是Test01)来满足我们自己的需求啦!
问题2.:为何不使用一个创建窗口的函数装下现在在构造函数里代码,使得代码更具有意义呢?
因为这是我们自己的窗口(MyFrame),也就是说我使用这一次就不需要使用了(定制窗口),并且,我们在创建自己的窗口的时候,是需要一创建对象就直接出现窗口的。因为我们自己的需求已经很明确了,并且这个类并不为其他人服务。
构造方法内调用的两个方法:
构造方法内调用了两个方法,这两个方法自然也是继承自JFrame,并且在这里我们只是最简单的实现了作出了一个窗口,实际上我们还可以使用更多的设定,如若你实用的是Eclipse编译器的话,你可以使用this.编译器会自动提示方法,而且这里的方法大多是很容易从名字看懂它的意思的,所以我们现在并不详细去逐个讲解,而是在有需求时,添加并讲解!
this.setSize(400,300); 这个函数从名字上来看就可以知道,是设置窗口大小的。input为两个int型的数字,为窗口的长和宽。
this.setVisible(true); 这个函数是设置窗口是否可见的。事实上你如若没有这个语句,并且 new Test01时,你已经创建了窗口,但并不可见,因为可见性默认为否,而在这里你设置为true则让它可见了!
第二步:如何去画出一个图案(paint方法与Graphics类)
1 import java.awt.Graphics;
2
3 import javax.swing.JFrame;
4 import javax.swing.JPanel;
5
6 /**
7 * 目的:初步认识组件的概念,初步学习使用Graphics类,与paint方法。
8 * @author HP
9 *
10 */
11 public class Test02 extends JFrame{
12 MyPanel02 mp = null;
13
14 public static void main (String[] args) { 15 new Test02(); 16 } 17 18 //构造函数初始化 19 public Test02 () { 20 mp = new MyPanel02(); 21 22 //添加组件 23 this.add(mp); 24 25 this.setSize(400,300); 26 this.setVisible(true); 27 } 28 } 29 30 class MyPanel02 extends JPanel { 31 //重写paint方法 32 public void paint (Graphics g) { 33 g.drawRect(100, 100, 100, 100); 34 } 35 }
代码讲解: 在这里我们自己创建了一个类MyPanel02 来继承 JPanel(java画板),和创建窗口是一样的,这是一个特制的画板!因为避免同一个包内有多个MyPanel所以我将它取名为MyPanel02,避免错误。这里面我重写了paint方法,并且这个paint方法input为Graphics g,很显然Graphics也是一个类,并且是图形类。我创建了MyPanel02并且通过添加组件的操作,将画板组件添加进入窗口中。
问题1:为什么我们并没有主动调用paint方法,结果却显示,已经执行了我在paint内部写的代码(有兴趣可以多次尝试一下)?
这里涉及到一种Java设计模式,
============================================================================================================================================================================
未完待续!
============================================================================================================================================================================