们已经完成了Applet主要功能的开发,剩下的工作是如何通过按钮控制游戏。在编写控制代码之前,先为开始/暂停按钮(jButton1)和停止按钮(jButton2) 装饰一下,再编写控制代码。
1、为按钮添加图标
需要准备3张按钮的图标,图标为gif格式,尺寸大小为25×24象素。
· :jButton1在结束和暂停状态的图标,命名为start.gif。
· :jButton1在游戏处于运行状态的图标,命名为pause.gif。
· :jButton2的图标,命名为stop.gif。当游戏处于暂停或运行状态时,jButton2才被激活。
将这些文件放置在TypeCharApplet.java源文件的目录下,即<工程根目录>/src/game目录下。
下面的代码使用java.awt.ImageIcon引用这3个图标,并在jbInit()中将图标显示到按钮上,如下所示:
代码清单 7 定义3个图标变量
1. …
2. public class TypeTrainApplet extends JApplet {
3. …
4. ImageIcon startIcon = new ImageIcon(TypeTrainApplet.class.getResource("start.gif"));
5. ImageIcon pauseIcon = new ImageIcon(TypeTrainApplet.class.getResource("pause.gif"));
6. ImageIcon stopIcon = new ImageIcon(TypeTrainApplet.class.getResource("stop.gif"));
7. …
8. private void jbInit() throws Exception {
9. …
10. jButton1.setIcon(startIcon);//设置开始按钮的图标
11. jButton2.setIcon(stopIcon);//设置停止按钮的图标
12. jButton2.setEnabled(false);//将停止按钮图标置为非激活态
13. …
14. }
15. }
第4~6用前面所述的图片初始化3个图标变量,其中TypeTrainApplet.class.getResource()方法以TypeTrainApplet.class所在目录为相对目录,查询资源文件。
第10~11行分别将开始和结束图标显示到对应的按钮上,当用户点击开始按钮后,才将jButton1的图标切换为暂停的图标pauseIcon。
2、通过按钮事件控制游戏
由于字母下落线程通过监测statusCode的值决定结束或暂停,所以我们仅需要通过按钮事件更改这个控制变量就可以达到控制游戏的目的了。
首先,我们打开TypeTrainApplet.java切换到Design的UI设计界面中,双击jButton1按钮,JBuilder自动为jButton1添加一个按钮点击事件监听器,并切换到Source视图中,将光标定位到事件处理方法处,我们在方法中添加以下粗体的代码:
代码清单 8 开始/暂停按钮事件处理方法
1. …
2. public class TypeTrainApplet extends JApplet {
3. …
4. public void jButton1_actionPerformed(ActionEvent e) {
5. if (statusCode == 0) { //从结束->开始
6. resetGame();
7. statusCode = 1;
8. colWidth = canvas.getWidth() / columnCount;
9. //实例化字母下落线程产生器
10. GenerateDropThread gdThread = new GenerateDropThread();
11. gdThread.start();//产生器启动
12. jButton1.setIcon(pauseIcon);//切换为暂停的图标
13. jButton2.setEnabled(true);//停止按钮激活
14. } else if (statusCode == 1) { //从运行->暂停
15. statusCode = 2;
16. jButton1.setIcon(startIcon);
17. } else { //从暂停->运行
18. statusCode = 1;
19. jButton1.setIcon(pauseIcon);
20. synchronized (canvas) {//通过canvas通知所有暂停的线程继续运行
21. canvas.notifyAll();
22. }
23. }
24. this.requestFocus();//Applet接受光标,以便其接受按键事件
25. }
26. …
27. }
在jButton1的按钮点击事件处理方法里根据statusCode所标识的游戏状态分别进行处理:
·当statusC |