65.9K
CodeProject 正在变化。 阅读更多。
Home

在黑莓应用程序中创建用户界面

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2011 年 9 月 11 日

CPOL

3分钟阅读

viewsIcon

36022

downloadIcon

949

本文介绍了在黑莓应用程序中创建用户界面的入门知识

Sample Image - maximum width is 600 pixelsSample Image - maximum width is 600 pixels

引言

黑莓 Java 开发环境 (JDE) 用于开发在黑莓手持设备上运行的应用程序。

有两种 API 集用于创建用户界面

  • MIDP UI API
  • 黑莓 UI API

当您想要开发在符合 MIDP 的设备上运行的应用程序时,可以使用 MIDP UI API,而当您想要专门开发在黑莓手持设备上运行的应用程序时,可以使用黑莓 UI API。当编译黑莓 Java 源代码时,它会生成一个 .cod 文件。此 .cod 文件被复制到设备上,并由设备的虚拟机 (vm) 执行。

在本文中,我专注于使用黑莓 UI API 开发应用程序。最后,我创建了一个简单的应用程序,用于演示基本概念。

背景

Components

黑莓应用程序中用户界面的主要元素是 Screen 类。一次只能显示一个屏幕。Screen 对象存储在堆栈中。为了显示一个屏幕,它被推到堆栈的顶部;为了关闭它,它被从堆栈中弹出。

用户界面组件由字段表示。所有 UI 组件都位于 net.rim.device.api.ui.component 包中。

常用的字段是

  • Label 字段 - 这是 LabelField 类的实例,用于显示 static 文本。
  • Text 字段 - TextField 类用于创建一个可编辑的字段,用户可以在其中输入值。

  • Button 字段 - ButtonField 类用于创建一个可点击的字段以执行操作。

  • 数字选择字段 - NumericChoice 类用于允许用户从一系列数字中选择一个数字值。

  • 对象选择字段 - ObjectChoice 类用于允许用户从对象列表中选择任何对象。

  • Checkbox 字段 - CheckboxField 类用于允许用户选择两个选项中的一个。

  • RadioButton 字段 - RadioButtonField 类用于允许用户从多个选项中选择一个值。

  • Gauge 字段 - GaugeField 类用于显示进度条。

Layouts

可以使用布局管理器来管理屏幕上组件的布局。有四个布局管理器类,如下所示

  • VerticalFieldManager
  • HoriziontalFieldManager
  • FlowFieldManager
  • DialogFieldManager

可以使用以下代码创建垂直布局并向其添加项目。

VerticalFieldManager manager=new VerticalFieldManager(Manager.VERTICAL_SCROLL);
manager.add(button1);
manager.add(button2);
screen.add(manager);

菜单

可以创建菜单来执行操作。 MenuItem 类可用于创建菜单,如下所示

private MenuItem viewItem = new MenuItem("Show Message", 100, 10)
{
    public void run()
    {
        Dialog.inform("Welcome to BlackBerry JDE");
    }
};

Screen 类的 makeMenu() 函数被重写,以将 menuitem 添加到屏幕。

protected void makeMenu(Menu menu,int n)
{
    menu.add(closeItem);
}

事件

可以通过实现 FieldChangeListener 接口和 fieldChanged 方法来处理事件。例如

class MyClass extends MainScreen implements FieldChangeListener
...
...
...
public void fieldChanged(Field field,int context)

可以通过调用字段的 setChangeListener 方法来监视对字段的更改,如下所示

buttonfield.setChangeListener(this);

Using the Code

以下程序演示了不同字段的用法。

// Importing the required packages.

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.ui.component.*;

class UIExample extends UiApplication	// Extending from UIApplication class.
{
    public static void main(String args[])	// main function.
    {
        new UIExample().enterEventDispatcher();	// Start event handling process
    }
    UIExample()	// Constructor.
    {
        pushScreen(new MyClass());	// Push screen on top of the stack
    }
}
class MyClass extends MainScreen implements FieldChangeListener	// User defined 
							// screen class.
{
    // Declaring fields.

    LabelField lfield;
    TextField tfield;
    ButtonField bField;
    NumericChoiceField nfield;
    ObjectChoiceField ofield;
    CheckboxField chkfield;
    RadioButtonField rfield1,rfield2,rfield3;
    GaugeField gfield;

    // Declaring Close Menu.

    private MenuItem closeItem = new MenuItem("Close", 100, 10)
    {
        public void run()
        {
            onClose();
        }
    };

    // Adding menu to screen.

    protected void makeMenu(Menu menu,int n)
    {
        menu.add(closeItem);
    }

    public MyClass()	// Constructor.
    {

        // Initializing fields and creating user interface

        VerticalFieldManager manager=new VerticalFieldManager
        	(Manager.VERTICAL_SCROLL);	// Layout Manager
        lfield=new LabelField("Enter a value: ");	// LabelField
        tfield=new TextField();			// TextField
        bField=new ButtonField("OK");		// ButtonField
        bField.setChangeListener(this);
        nfield=new NumericChoiceField("Select a number",1,20,1);//NumericChoiceField
        nfield.setChangeListener(this);
        String[] objects={"A","B","C","D","E","F","G","H","I","J"};// List of objects for 
							//the ObjectChoiceField
        ofield=new ObjectChoiceField("Select a value",objects);	// ObjectChoiceField
        ofield.setChangeListener(this);
        chkfield=new CheckboxField("Select",false);		// CheckboxField
        chkfield.setChangeListener(this);
        RadioButtonGroup group=new RadioButtonGroup();		// RadioButtonGroup to 
							// select a single option
        rfield1=new RadioButtonField("Option 1",group,true);	// RadioButtonField
        rfield2=new RadioButtonField("Option 2",group,false);	// RadioButtonField
        rfield3=new RadioButtonField("Option 3",group,false);	// RadioButtonField
        rfield1.setChangeListener(this);
        rfield2.setChangeListener(this);
        rfield3.setChangeListener(this);
        gfield=new GaugeField("Select a value: ",1,100,1,
			GaugeField.FOCUSABLE|GaugeField.EDITABLE);
							// GaugeField
        gfield.setChangeListener(this);
        manager.add(lfield);
        manager.add(tfield);
        manager.add(bField);
        manager.add(nfield);
        manager.add(ofield);
        manager.add(chkfield);
        manager.add(rfield1);
        manager.add(rfield2);
        manager.add(rfield3);
        manager.add(gfield);
        add(manager);
    }
    public void fieldChanged(Field field,int context)	// Handling events.
    		// The Dialog.inform method is used to display an alert message.
    {
        if(field==bField)
        {
            Dialog.inform("You have clicked the button");
        }
        if(field==nfield)
        {
            int n=nfield.getSelectedValue();
            Dialog.inform("You have selected "+Integer.toString(n));
        }
        if(field==ofield)
        {
            String s=ofield.getChoice(ofield.getSelectedIndex()).toString();
            Dialog.inform("You have selected "+s);
        }
        if(field==chkfield)
        {
            boolean b=chkfield.getChecked();		// Check Status of checkbox.
            Dialog.inform("Option "+(b?"selected":"unselected"));
        }
        if(field==rfield1)
        {
            if(rfield1.isSelected())			// Check RadioButton status.
            {
                Dialog.inform("Option 1 selected");
            }
        }
        if(field==rfield2)
        {
            if(rfield2.isSelected())			// Check RadioButton status.
            {
                Dialog.inform("Option 2 selected");
            }
        }
        if(field==rfield3)
        {
            if(rfield3.isSelected())			// Check RadioButton status.
            {
                Dialog.inform("Option 3 selected");
            }
        }
        if(field==gfield)
        {
            int value=gfield.getValue();		// Get value of Gauge
            Dialog.inform("You have selected "+value+" value");
        }
    }
}

关注点

当项目在黑莓 JDE 中执行时,它会在黑莓模拟器中打开,并可以从下载部分中选择。

我希望这篇文章能为用户提供开发黑莓手持设备的基本信息。

历史

  • 2011年9月10日:初始版本
© . All rights reserved.