【转载】黑莓开发学习(入门教程)04-标准界面的HelloWorld程序
来源:互联网 发布:天津福禄克数据测试 编辑:程序博客网 时间:2024/05/16 08:01
本文转载自:http://hi.baidu.com/netis/blog/item/5e4c2b2a9a5b0591033bf6b8.html
作者:小叶 xiaoye.org
发布:http://hi.baidu.com/netis
可以任意转载, 转载时请务必以超链接形式标明文章原始出处和作者信息
摘要:看到Hello World显示在BB屏幕,是不是有些激动?但这个程序最多只能算是测试开发环境是否正常可用的实验代码,没有友好的界面,没有良好的交互。一个像样的程序只要要有个彩色的窗口、有用户输入、有按钮、有菜单吧?完善一下标准的HelloWorld程序。
标准的HelloWorld程序也太简陋了,有了太多的想法要实现:
▲能否设置一个漂亮的程序图标,而不是黑乎乎的命令行窗口?
▲能否设置一个程序标题?
▲能否放一个按钮点击后提示欢迎信息?
▲能否自定义一个菜单?
04.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);
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);
}
}
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);
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.4-增加一个用户输入域
通过如下代码即可实现:
为了后续点击按钮可以取得录入的内容,在构造函数前定义一个输入域控件。
//定义类的元素
private BasicEditField edtName = null; //姓名输入域
private BasicEditField edtName = null; //姓名输入域
创建和添加数据域。
//添加一个输入域
edtName = new BasicEditField("输入您的姓名: ","小叶", 20,Field.FIELD_LEFT );
mgr.add(edtName);
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);
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());
}
};
public void fieldChanged(Field field, int ctx)
{
if (field == btnShow) {
Dialog.alert("欢迎您-"+edtName.getText());
}
};
程序运行后,点击按钮,按钮就会根据录入的内容显示欢迎信息,如下图。
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();
}
};
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);
}
protected void makeMenu(Menu menu, int instance)
{
menu.add(showItem);
menu.add(closeItem);
}
菜单显示效果如下:
点击菜单后显示对话框:
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();
}
}
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);
}
}
}
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);
}
}
}
- 【转载】黑莓开发学习(入门教程)04-标准界面的HelloWorld程序
- 黑莓开发学习(入门教程)标准界面的HelloWorld程序
- 【转载】黑莓开发学习(入门教程)03-经典的HelloWorld程序
- 黑莓开发学习(入门教程)03-经典的HelloWorld程序
- 【转载】黑莓开发学习(入门教程)02-开发环境搭建
- 【转载】黑莓开发学习(入门教程)01-前言
- 【转载】黑莓开发学习(入门教程)05-再说开发环境和入门阶段的一些问题
- 黑莓开发学习(入门教程)
- 黑莓开发学习(入门教程)01-前言
- 黑莓开发学习(入门教程)02-开发环境搭建
- 黑莓开发学习(入门教程)05-再说开发环境和入门阶段的一些问题
- 黑莓开发学习(入门教程)05-再说开发环境和入门阶段的一些问题
- 黑莓界面开发实例
- unrealscript helloworld --开发入门教程
- 一个标准的helloworld程序(java)
- 黑莓开发学习Trip
- [黑莓开发之路][01][黑莓开发平台介绍][04][Java Application Development][JavaME程序开发]
- 黑莓应用开发综述(转载加工基于CSDN黑莓专区)
- 有点意思:不患寡而患不均,不患贫而患不安
- 【转载】黑莓开发学习(入门教程)03-经典的HelloWorld程序
- DNS BIND的配置
- 为什么研究?
- 最近用到的一点技术点
- 【转载】黑莓开发学习(入门教程)04-标准界面的HelloWorld程序
- php中的字符串连接
- 由MessageBox透视Win32 API的调用
- 自己动手
- 微软发布12月安全公告预告 补丁6个
- POJ 3087 shuffle'em up map判重
- 让apache2传输更快加速apache2
- win32 api 串口通信
- 【转载】黑莓开发学习(入门教程)05-再说开发环境和入门阶段的一些问题