有效利用UI部件(2)
在上一讲,我们说明了名为Alert 和TextFieldUI部件的使用方法,最后还出了练习题,这些都还记得吧? | |
当然记得,是制作猜数字游戏。 | |
我们将在这一讲来解答那道练习题,之后将接着介绍Ticker、StringItem以及 List类的使用方法。 |
1.猜数字游戏
上一讲的练习题的题目是完成猜数字游戏。 问题点是未完成commandAction指令,其实加入适当代码就可以解决了。 | |
通过 TextField获取用户输入数值,并显示与数值相对应的信息就可以啦。 | |
是这样的。信息的显示可以通过运用Alert类来完成。 那么我就公布答案了。下面即为完成后的commandAction指令。 |
GuessTheNumber.java 的commandAction指令
1
| public void commandAction(Command c, Displayable s) { | ||
2
| if (c == exitCommand) { | ||
3
| // 选择“Exit”时的处理 | ||
4
| // 应用程序结束 | ||
5
| destroyApp(false); | ||
6
| notifyDestroyed(); | ||
7 | } else if(c == guessCommand) { | ||
8 | // 选择“Guess”时的处理 | ||
9 | |||
10 | // 将count增加1 | ||
11 | count++; | ||
12 | |||
13 | // 从输入的字符串里提取整数数字 | ||
14 | int value = Integer.parseInt(textField.getString()); | ||
15 | String message = ""; | ||
16 | |||
17 | /* | ||
18 | 运用Alert显示信息 | ||
19 | 纠正答案时,根据猜测的数字过大或者过小, | ||
20 | 显示信息也作相应的改变 | ||
21 | 答案正确时,运行reset方法,返回初始状态。 | ||
22 | */ | ||
23 | if(value == answer) { | ||
24 | // 正确答案 | ||
25 | message = "Congratulations!/nThe answer was " + answer + "./n" + | ||
26 | "It took you " + count + " turns."; | ||
27 | reset(); // 答案初始化 | ||
28 | } else if(value > answer) { | ||
29 | // 猜测数值过大 | ||
30 | message = "Turn " + count + ". Your guess is too high."; | ||
31 | } else { | ||
32 | // 猜测数值过小 | ||
33 | message = "Turn " + count + ". Your guess is too low."; | ||
34 | } | ||
35 | |||
36 | // 生成用于显示信息的Alert | ||
37 | Alert alert = new Alert("Result"); | ||
38 | alert.setType(AlertType.INFO); | ||
39 | alert.setTimeout(Alert.FOREVER); | ||
40 | alert.setString(message); | ||
41 | display.setCurrent(alert); | ||
42 | } | ||
43 | } | ||
猜测数值与答案进行对比后的信息,将通过运行Alert类,显示在画面中。 | |
如果掌握了之前所学内容的话,这不难理解。 | |
将commandAction指令做如上改写后,猜数字的游戏就全部完成了。 |
2.Tiicker类
那么,我们就来进入这一讲的内容。 首先来说明一下Ticker类。它用于在画面中显示滚动的字符串。 Constructor如下所示,非常简单。通过参数来指定显示字符串。 |
Ticker(String str) |
显示Ticker时,会使用到Displayable类的setTicker指令。下面的代码就是在画面中显示Ticker的例子。 |
TickerTest.java
1
| import javax.microedition.midlet.MIDlet; | ||
2
| import javax.microedition.lcdui.*; | ||
3
| |||
4
| public class TickerTest extends MIDlet implements CommandListener { | ||
5
| |||
6
| // 制定指令 | ||
7 | private Command exitCommand = new Command("Exit", Command.EXIT, 1); | ||
8 | private Command command0 = new Command("Short Ticker", Command.SCREEN,1); | ||
9 | private Command command1 = new Command("Long Ticker", Command.SCREEN,1); | ||
10 | |||
11 | // 生成Ticker Object | ||
12 | private Ticker ticker = new Ticker("This is a ticker."); | ||
13 | |||
14 | private boolean firstTime; | ||
15 | private Form mainForm; | ||
16 | private Display display; | ||
17 | |||
18 | public TickerTest() { | ||
19 | firstTime = true; | ||
20 | mainForm = new Form("TickerTest"); | ||
21 | } | ||
22 | |||
23 | protected void startApp() { | ||
24 | if (firstTime) { | ||
25 | // 追加Ticker | ||
26 | mainForm.setTicker(ticker); | ||
27 | |||
28 | // 追加指令 | ||
29 | mainForm.addCommand(exitCommand); | ||
30 | mainForm.addCommand(Command0); | ||
31 | mainForm.addCommand(Command1); | ||
32 | |||
33 | // 注册CommandListener | ||
34 | mainForm.setCommandListener(this); | ||
35 | firstTime = false; | ||
36 | } | ||
37 | display = Display.getDisplay(this); | ||
38 | display.setCurrent(mainForm); | ||
39 | } | ||
40 | |||
41 | public void commandAction(Command c, Displayable s) { | ||
42 | if (c == exitCommand) { | ||
43 | // 选择“Exit”时的处理 | ||
44 | // 应用程序结束 | ||
45 | destroyApp(false); | ||
46 | notifyDestroyed(); | ||
47 | } else if(c == alarmCommand 0) { | ||
48 | // 选择“Short Ticker”时的处理 | ||
49 | |||
50 | // 变更ticker的字符串 | ||
51 | ticker.setString("ABCD"); | ||
52 | } else if(c == alarmCommand 0) { | ||
53 | // 选择“Long Ticker”时的处理 | ||
54 | |||
55 | // 变更ticker的字符串 | ||
56 | ticker.setString("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"); | ||
57 | } | ||
58 | } | ||
59 | |||
60 | protected void destroyApp(boolean unconditional) { | ||
61 | } | ||
62 | |||
63 | protected void pauseApp() { | ||
64 | } | ||
65 | } | ||
在上面的代码中,通过“Short Ticker”和“Long Ticker”指令,来切换在Ticker中显示的字符串。 如代码中的第51行和56行所示,通过Ticker类的setString指令可以变更所显示的字符串。 |
但需要注意的是,UI部件的画面显示在模拟器上与在实机上有很大差别,所以,最后一定要在实机上实际运行确认才可以。 |