我们需要知道窗口显示了哪些东西。百度搜索这个小游戏,或者上小游戏网站玩几次就可以知道游戏规则了http://www.7k7k.com/swf/129505.htm
我们可以看到游戏界面和游戏玩法
先画一个窗口,在编写一个窗口时我们所需要的方法都可以在Frame类中copy下来,以防自己写错。我们需要的窗口:黑底,边框可以随着拖动而改变,设置窗口大小,窗口上方写着tankgame(总共四个要求)
在windows类中我们可以找到这些方法:(1)setSize(int width, int height)(2)setVisible(boolean b)
在Frame类中我们可以找到这些方法:(1)setTitle(String title)(2)setResizable(boolean resizable) (3) setBackground(Color bgColor)
编写的程序遇到的问题(1)
应该进入java文件所在的目录。(2)数据类型的问题(见我的java数据类型)
1 import java.awt.*;2 public class TankGame extendsFrame {3 public voidshowFrame(){4 setBackground(Color.black);5 setTitle("tankgame");6 setResizable(true);7 setVisible(true);8 setSize(514,450);9
10
11
12 }13
14
15
16 public static voidmain(String[] args){17
18
19 newTankGame().showFrame();20
21
22 }23
关掉这个界面需要在命令行输入ctrl+c(还没进行事件处理,就像你为别人创造了一个东西,但是你还没有为别人删除一个东西的能力,那个叉叉只是一个图像,没有任何意义,跟界面上的每个图像一样,都是图像)
计算机屏幕的坐标是从左上方开始的,x轴朝上,y轴朝下
但是这个窗口我们并不满意,因为这个界面跟我们看到的不一样(如下图)
所以我们需要用到panel(这个容器需要跟Frame一起使用才能显示出来)见container的add方法
我们可以通过panel一些方法(从container和component找到)。设置大小,背景颜色,可见的(1)setBackground(Color c)(2)setSize(int width, int height)(3)setVisible(boolean b)
个人的代码只是一种测试,不是完全按照要求来
1 import java.awt.*;2 public class TankGame extendsFrame {3 public voidshowFrame(){4 setBackground(Color.black);5 setTitle("tankgame");6 setResizable(true);7 setVisible(true);8 setSize(514,450);9
10
11
12 }13
14
15
16 public static voidmain(String[] args){17
18
19 TankGame tankgame=newTankGame();20 tankgame.showFrame();21 TankGameTwo tankgametwo=newTankGameTwo();22 tankgametwo.showPanel();23 tankgame.add(tankgametwo);24
25
26 }27
28
29 }30 class TankGameTwo extendsPanel{31 voidshowPanel(){32 setBackground(Color.orange);33 setSize(90,90);34 setVisible(true);35 }36
37
38
39 }
如果按照这个代码,我们会发现,我们根本看不见frame的颜色,我们看见的颜色是panel的颜色(如果你晃动边框,frame的颜色会显示出来)
解决办法在两个类中的方法中调用一个方法(因为默认有布局管理器,我们设置大小对他们就没有用了,所以我们需要手动地设置,取消布局管理器)
1 import java.awt.*;2 public class TankGame extendsFrame {3 public voidshowFrame(){4 setBackground(Color.gray);5 setTitle("tankgame");6 setResizable(true);7 setVisible(true);8 setSize(514,450);9 setLayout(null);10
11
12
13 }14
15
16
17 public static voidmain(String[] args){18
19
20 TankGame tankgame=newTankGame();21 tankgame.showFrame();22 TankGameTwo tankgametwo=newTankGameTwo();23 tankgametwo.showPanel();24 tankgame.add(tankgametwo);25
26
27 }28
29
30 }31 class TankGameTwo extendsPanel{32 voidshowPanel(){33 setBackground(Color.black);34 setSize(415,415);35 setVisible(true);36 setLayout(null);37 }38
39
40
41 }
那么怎么使panel相对于Frame往中间去一点呢,有个设置x,y的方法,同时设置大小
界面做的有点丑,这个需要自己花很多次调整,我没有什么工具来慢慢调整的(或者对照网页上游戏的界面来设置,截屏就知道大小了,前端工程师经常这样做)
那么问题来了怎么使panel跟着container改动呢?这种方法由布局管理器来实现
这个接口下有很多种布局管理器
这样就可以让panle随着Frame动而不改变整体布局(这种逻辑关系是frame用弩据管理器来布局panel)
怎么使鼠标按那个叉叉,然后窗口关掉。
这样发现不对,因为少了适配器的概念。而且实现接口是每个方法都必须实现,如果不全部实现,就是上述的错误。
改正之后
但是你还会发现有错误(因为没有引入包)
最后你还会发现一个问题,怎么在事件器中设置当前窗口的setvisible方法。
1 import java.awt.*;
2 import java.awt.event.*;3 public class TankGame extendsFrame {4 public voidshowFrame(){5 setBackground(Color.gray);6 setTitle("tankgame");7 setResizable(true);8 setVisible(true);9 setSize(514,450);10 setLayout(newFlowLayout());11
12 li l=newli();13 this.addWindowListener(l);14
15
16
17 }18
19
20
21 public static voidmain(String[] args){22
23
24 TankGame tankgame=newTankGame();25 tankgame.showFrame();26 TankGameTwo tankgametwo=newTankGameTwo();27 tankgametwo.showPanel();28 tankgame.add(tankgametwo);29
30
31
32 }33
34
35 }36 class li extendsWindowAdapter{37
38
39 public voidwindowClosing(WindowEvent e){40 Window i=(Window)e.getWindow();41 i.setVisible(false);42 System.exit(-1);43
44
45 }46
47
48 }49 class TankGameTwo extendsPanel{50 voidshowPanel(){51 setBackground(Color.black);52 setBounds(35,38,415,415);53 setVisible(true);54 setLayout(null);55
56 }57
63
64 65
66
67
68
69
70 }