【转载】黑莓开发学习(入门教程)04-标准界面的HelloWorld程序

本文转载自:http://hi.baidu.com/netis/blog/item/5e4c2b2a9a5b0591033bf6b8.html

作者:小叶 xiaoye.org
发布: http://hi.baidu.com/netis
可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息
摘要:看到Hello World显示在BB屏幕,是不是有些激动?但这个程序最多只能算是测试开发环境是否正常可用的实验代码,没有友好的界面,没有良好的交互。一个像样的程序只要要有个彩色的窗口、有用户输入、有按钮、有菜单吧?完善一下标准的HelloWorld程序。
标准的HelloWorld程序也太简陋了,有了太多的想法要实现:
▲能否设置一个漂亮的程序图标,而不是黑乎乎的命令行窗口?
▲能否设置一个程序标题?
▲能否放一个按钮点击后提示欢迎信息?
▲能否自定义一个菜单?

04.1-思维导图

【转载】黑莓开发学习(入门教程)04-标准界面的HelloWorld程序_第1张图片

04.1-为程序添加图标

在JDE的工作区点击FirstDemo, 右键->properties....。在属性设置窗口点击Add添加一个图像文件,支持.png、.gif、.jpg。
图像文件名必须是英文名,否则编译的时候会提示“I/O Error: invalid UTF-8 encoding”

程序编译运行后图标就会显示成一个笑脸:

04.2-设置程序标题

通过如下代码即可实现:
//设置程序的标题
LabelField title = new LabelField( "Hello World",Field.FIELD_HCENTER);
this.setTitle(title);

04.3-设置程序主界面的背景

要实现这个功能需要分两步,

第一步:从容器控件VerticalFieldManager基础一个新布局控件BackgroundManager,增加一个背景颜色的属性,并通过重载VerticalFieldManager的paintBackground来实现自定义设置的显示。

//定义一个窗口布局控件   主要是为了能改变窗口背景颜色
public static class BackgroundManager extends VerticalFieldManager
{
     private int bgColor = Color.NAVY;
     public BackgroundManager()
     {
         super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );
         bgColor = Color.NAVY;
     }
    
     public BackgroundManager( int bgcolor)
     {
         super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );
         bgColor = bgcolor;            
     }
    //重新设置程序背景色彩
     protected void paintBackground(Graphics g)
     {                   
         g.setBackgroundColor(bgColor);
         g.clear();
         super.paint(g);
     }
}
第二步:创建一个背景容器BackgroundManager命名为mgr,并将其他控件放置在这个背景容器上,最后将背景容器放置到程序主窗口HelloWorldScreen上。
//背景容器实例
BackgroundManager mgr = new BackgroundManager(Color.MEDIUMAQUAMARINE);
//添加一个输入域
edtName = new BasicEditField( "输入您的姓名: ", "小叶", 20,Field.FIELD_LEFT );
mgr.add(edtName);
//添加一个按钮 点击后根据输入的内容提示
btnShow = new ButtonField( "显示欢迎信息",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );
btnShow.setChangeListener( this);
mgr.add(btnShow);    
this.add(mgr);
下图为实施上两步后的效果:
【转载】黑莓开发学习(入门教程)04-标准界面的HelloWorld程序_第2张图片

04.4-增加一个用户输入域

通过如下代码即可实现:
为了后续点击按钮可以取得录入的内容,在构造函数前定义一个输入域控件。
//定义类的元素
private BasicEditField edtName = null;   //姓名输入域
创建和添加数据域。
//添加一个输入域
edtName = new BasicEditField( "输入您的姓名: ", "小叶", 20,Field.FIELD_LEFT );
mgr.add(edtName);
效果见上图。

04.5-添加一个按钮

//添加一个按钮 点击后根据输入的内容提示
btnShow = new ButtonField( "显示欢迎信息",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );
btnShow.setChangeListener( this);
mgr.add(btnShow);    
this.add(mgr);
对按钮事件接口也需要继承后定义下接口处理
//处理按钮事件
public void fieldChanged(Field field, int ctx)
{
     if (field == btnShow) {        
         Dialog.alert( "欢迎您-" +edtName.getText());
     }
};
程序运行后,点击按钮,按钮就会根据录入的内容显示欢迎信息,如下图。
【转载】黑莓开发学习(入门教程)04-标准界面的HelloWorld程序_第3张图片

04.6-自定义菜单

首先,创建需要显示的子菜单,为区分与系统默认菜单项,菜单显示名称以*开始。
//定义显示信息菜单项目
public MenuItem showItem = new MenuItem( "*显示欢迎信息", 160, 10 )
{
     public void run()
     {
         Dialog.alert( "欢迎您-" +edtName.getText());
     }
};
//定义显示关闭菜单项目
public MenuItem closeItem = new MenuItem( "*退出", 170, 10 )
{
     public void run()
     {
         onClose();
     }
};
其次,重载菜单生成函数,使得自定义菜单添加到系统默认菜单中。
//重载makeMenu 添加自定义的菜单
protected void makeMenu(Menu menu, int instance)
{       
   menu.add(showItem);
   menu.add(closeItem);
}
菜单显示效果如下:
【转载】黑莓开发学习(入门教程)04-标准界面的HelloWorld程序_第4张图片
点击菜单后显示对话框:

04.7-完整代码

为了代码的维护和可读性,将定义窗口类的代码单独成一个文件HelloWorldScreen.java。创建新程序文件的方法见第三部分的“03.4-建立程序文件”。

主程序HelloWorld.java

/*
HelloWorld.java
主程序
作者:小叶 xiaoye.org
发布:http://hi.baidu.com/netis
可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息
*/

package src;
//导入库
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.container.MainScreen;
public class HelloWorld extends UiApplication {   
     //程序的构造函数       
     public HelloWorld() {   
         HelloWorldScreen screen = new HelloWorldScreen();   
         pushScreen(screen);   
     }   
      //程序的入口函数 java程序运行都需要这个 否则会提示找不到main的提示
     public static void main(String[] args) {   
         HelloWorld app = new HelloWorld();   
         app.enterEventDispatcher();   
     }
}

窗口类HelloWorldScreen.java

/*
HelloWorldScreen.java
窗口类 实现了程序的用户界面
作者:小叶 xiaoye.org
发布:http://hi.baidu.com/netis
可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息
*/

package src;
//导入库
import net.rim.device.api.ui. *;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component. *;
import net.rim.device.api.ui.container. *;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.system.Display;
//窗口类    
final class HelloWorldScreen extends MainScreen implements FieldChangeListener {
     //定义类的元素
     private BasicEditField edtName = null;   //姓名输入域
     private ButtonField btnShow = null;       //显示按钮
     //构造函数
     public HelloWorldScreen() {
         //父类的事件 显示默认的上下文菜单
         super(DEFAULT_MENU | DEFAULT_CLOSE);
         //设置程序的标题
         LabelField title = new LabelField( "Hello World",Field.FIELD_HCENTER);
         this.setTitle(title);
         //背景容器实例
         BackgroundManager mgr = new BackgroundManager(Color.MEDIUMAQUAMARINE);
         //添加一个输入域
         edtName = new BasicEditField( "输入您的姓名: ", "小叶", 20,Field.FIELD_LEFT );
         mgr.add(edtName);
         //添加一个按钮 点击后根据输入的内容提示
         btnShow = new ButtonField( "显示欢迎信息",Field.FIELD_HCENTER | ButtonField.CONSUME_CLICK );
         btnShow.setChangeListener( this);
         mgr.add(btnShow);    
         this.add(mgr);
     }
    
     //定义显示信息菜单项目
     public MenuItem showItem = new MenuItem( "*显示欢迎信息", 160, 10 )
     {
         public void run()
         {
             Dialog.alert( "欢迎您-" +edtName.getText());
         }
     };
     //定义显示关闭菜单项目
     public MenuItem closeItem = new MenuItem( "*退出", 170, 10 )
     {
         public void run()
         {
             onClose();
         }
     };
    
      //重载makeMenu 添加自定义的菜单
      protected void makeMenu(Menu menu, int instance)
      {       
         menu.add(showItem);
         menu.add(closeItem);
     }
    
     //处理按钮事件
     public void fieldChanged(Field field, int ctx)
     {
         if (field == btnShow) {        
             Dialog.alert( "欢迎您-" +edtName.getText());
         }
     };  
    
     //重载onClose, 退出时提示
     public boolean onClose()
     {
         if ( Dialog.ask(Dialog.D_YES_NO, "确定退出吗?") == Dialog.YES )
         {
             System.exit( 0);
             return true;
         }
         return false;
     }  
    
     //定义一个窗口布局控件   主要是为了能改变窗口背景颜色
     public static class BackgroundManager extends VerticalFieldManager
     {
         private int bgColor = Color.NAVY;
         public BackgroundManager()
         {
             super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );
             bgColor = Color.NAVY;
         }
        
         public BackgroundManager( int bgcolor)
         {
             super( USE_ALL_HEIGHT | NO_VERTICAL_SCROLL | NO_VERTICAL_SCROLLBAR    );
             bgColor = bgcolor;            
         }
        //重新设置程序背景色彩
         protected void paintBackground(Graphics g)
         {                   
             g.setBackgroundColor(bgColor);
             g.clear();
             super.paint(g);
         }
     }
       
}

你可能感兴趣的:(Class,import,黑莓,scroll,menu,encoding)