`

定制含有CheckBox的ListField (BlackBerry)

阅读更多

版权所有,欢迎转载,转载请注明 : SinFrancis  http://mdev.cc

 

BB中是没办法将Checkbox与ListField结合在一起的,不过我们可以自己写个,但也不是真的Checkbox,只是在功能上实现了而已,外观上看着像Checkbox。关键就是在使用 : 

选中状态字符 : Characters.BALLOT_BOX_WITH_CHECK 

非选中字符 :Characters.BALLOT_BOX

 

请看代码:关键地方 drawListRow()

当点击每个Item的时候,判断此行的状态,然后进行选中或者取消,将Characters.BALLOT_BOX_WITH_CHECK 

或者Characters.BALLOT_BOX画上去就Ok 了。

 

 

 

/*
 * CheckBoxListFieldSample.java
 *
 * Research In Motion, 2003-2005
 * Confidential and proprietary.
 */

package cc.mdev.seek;

import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
import net.rim.device.api.system.*;
import java.util.Vector;

class CheckboxListField extends UiApplication implements ListFieldCallback
{
    private static final String[] _elements = {"First element", "Second element", "Third element", "Fourth element", "Fifth element"};
    private Vector _listData = new Vector();
    private ListField _checkList;
    private MenuItem _toggleItem;
    
    //A class to hold the Strings in the CheckBox and it's checkbox state (checked or unchecked).
    private class ChecklistData
    {
        private String _stringVal;
        private boolean _checked;
        
        ChecklistData()
        {
            _stringVal = "";
            _checked = false;
        }
        
        ChecklistData(String stringVal, boolean checked)
        {
            _stringVal = stringVal;
            _checked = checked;
        }
        
        //Get/set methods.
        private String getStringVal()
        {
            return _stringVal;
        }
        
        private boolean isChecked()
        {
            return _checked;
        }
        
        private void setStringVal(String stringVal)
        {
            _stringVal = stringVal;
        }
        
        private void setChecked(boolean checked)
        {
            _checked = checked;
        }
        
        //Toggle the checked status.
        private void toggleChecked()
        {
            _checked = !_checked;
        }
    }
    
  /*  public static void main(String args[])
    {
        CheckboxListField theApp = new CheckboxListField();
        theApp.enterEventDispatcher();
    }*/
    
    CheckboxListField() 
    {    
    
        //The menu item added to the screen when the _checkList field has focus.
        //This menu item toggles the checked/unchecked status of the selected row.
        _toggleItem = new MenuItem("Change Option", 200, 10) 
        {
            public void run()
            {
                //Get the index of the selected row.
                int index = _checkList.getSelectedIndex();
                
                //Get the ChecklistData for this row.
                ChecklistData data = (ChecklistData)_listData.elementAt(index);
                
                //Toggle its status.
                data.toggleChecked();
                
                //Update the Vector with the new ChecklistData.
                _listData.setElementAt(data, index);
                
                //Invalidate the modified row of the ListField.
                _checkList.invalidate(index);
            }
        };    
    
        MainScreen myScreen = new MainScreen()
        {
            //Override the makeMenu method so we can add a custom menu item
            //if the checkbox ListField has focus.
            protected void makeMenu(Menu menu, int instance)
            {
                Field focus = UiApplication.getUiApplication().getActiveScreen().getLeafFieldWithFocus();
                if(focus == _checkList) 
                {
                    //The _checkList ListField instance has focus.
                    //Add the _toggleItem MenuItem.
                    menu.add(_toggleItem);
                }
                
                //Create the default menu.
                super.makeMenu(menu, instance);
            }            
        };
        
        //Add a title to the screen.
        myScreen.setTitle(new LabelField("Checkbox ListField sample"));

        _checkList = new ListField()
        {
            //Allow the space bar to toggle the status of the selected row.
            protected boolean keyChar(char key, int status, int time)
            {
                boolean retVal = false;
                
                //If the spacebar was pressed...
                if (key == Characters.SPACE)
                {
                    //Get the index of the selected row.
                    int index = getSelectedIndex();
                    
                    //Get the ChecklistData for this row.
                    ChecklistData data = (ChecklistData)_listData.elementAt(index);
                    
                    //Toggle its status.
                    data.toggleChecked();
                    
                    //Update the Vector with the new ChecklistData.
                    _listData.setElementAt(data, index);
                    
                    //Invalidate the modified row of the ListField.
                    invalidate(index);
                    
                    //Consume this keyChar (key pressed).
                    retVal = true;
                }
                return retVal;
            }
        };
        
        //Set the ListFieldCallback
        _checkList.setCallback(this);
        
        int elementLength = _elements.length;
        
        //Populate the ListField & Vector with data.
        for(int count = 0; count < elementLength; ++count)
        {
            //Even rows will be checked, odd will be unchecked.
            if (count % 2 == 0)
            {
                _listData.addElement(new ChecklistData(_elements[count], true));
            }
            else
            {
                _listData.addElement(new ChecklistData(_elements[count], false));
            }
            _checkList.insert(count);
        }

        //Add the ListField to the screen.
        myScreen.add(_checkList);
        
        //Push the screen onto the display stack.
        pushScreen(myScreen);
    
    }
    
    //ListFieldCallback impelmentation.
    
    //Draws the list row.
    public void drawListRow(ListField list, Graphics graphics, int index, int y, int w) 
    {
        //Get the ChecklistData for the current row.
        ChecklistData currentRow = (ChecklistData)this.get(list, index);
        
        StringBuffer rowString = new StringBuffer();
        
        //If it is checked draw the String prefixed with a checked box,
        //prefix an unchecked box if it is not.
        if (currentRow.isChecked())
        {
            rowString.append(Characters.BALLOT_BOX_WITH_CHECK);
        }
        else
        {
            rowString.append(Characters.BALLOT_BOX);
        }
        
        //Append a couple spaces and the row's text.
        rowString.append(Characters.SPACE);
        rowString.append(Characters.SPACE);
        rowString.append(currentRow.getStringVal());
        
        //Draw the text.
        graphics.drawText(rowString.toString(), 0, y, 0, w);
    }
    
    //Returns the object at the specified index.
    public Object get(ListField list, int index) 
    {
        return _listData.elementAt(index);
    }
    
    //Returns the first occurence of the given String, bbeginning the search at index, 
    //and testing for equality using the equals method.
    public int indexOfList(ListField list, String p, int s) 
    {
        //return listElements.getSelectedIndex();
        return _listData.indexOf(p, s);
    }
    
    //Returns the screen width so the list uses the entire screen width.
    public int getPreferredWidth(ListField list) 
    {
        return Graphics.getScreenWidth();
    }
} 
 

 

分享到:
评论

相关推荐

    含有checkbox的combox控件类

    本话题主要涉及的是"含有checkbox的combox控件类",这是一个将复选框(Checkbox)功能集成到组合框(Combobox)中的特殊控件。这种控件在Windows编程中常见,尤其是在开发桌面应用时,它允许用户在列表中选择一个或...

    WPF:定制Checkbox样式,让“正确”绿得好看,让“错误”红的显眼

    WPF提供了样式、模板、触发器、状态管理、矢量形状等方式,让我们不需要背景...代码对Checkbox进行的样式定制,让“正确”绿得好看,让“错误”红的显眼。如果不是很适应自己系统的整体风格,可以对样式代码进行修改。

    ListView中添加CheckBox

    1、ListView item中加入checkbox后onListItemClick 事件无法触发。 原因:checkbox的优先级高于ListItem于是屏蔽了ListItem的单击事件。 解决方案:设置checkbox的android:focusable="false" 2、选择其中的...

    checkbox多项选中及取消选中

    通过CSS,可以定制 `checkbox` 的外观。虽然原生的 `checkbox` 样式有限,但可以使用 `label` 和 `before`/`after` 伪元素创建自定义的样式,甚至实现复杂的多态设计。 9. **现代Web框架中的Checkbox**: 如果...

    C#WinForm控件美化CheckBox

    在.NET 2.0版本和Visual Studio 2005(VS2005)环境下,开发者可以利用丰富的特性来定制和美化这些控件,以提高用户体验。 CheckBox控件的基本使用: 1. 添加CheckBox:在VS2005的设计视图中,可以通过工具箱将...

    WPF 自定义CheckBox样式

    本文将深入探讨如何利用字体图标来自定义CheckBox控件,从而提升应用的视觉效果。 首先,我们需要理解WPF中的CheckBox控件。CheckBox是WPF中的一个标准控件,用于提供用户可以选择或取消选择的选项。它的默认样式...

    C# WinForm 自定义CheckBox

    4. **扩展属性和方法**: 为了提供更多的定制选项,我们还可以定义新的公共属性和方法。例如,可以创建一个`BackgroundColor`属性来改变CheckBox的背景色,或者`CustomText`属性来添加自定义文本。 ```csharp public...

    PB 11.5 CheckBox三种状态的实例

    在PowerBuilder 11.5中,CheckBox控件是一种常用的数据输入组件,它允许用户进行是/否或真/假的选择。本实例将详细讲解如何实现CheckBox控件的三种状态:未选中、已选中以及灰色禁用状态,并探讨它们在实际应用中的...

    android之checkbox组件

    开发者可以通过定义样式文件(res/values/styles.xml)来定制Checkbox的外观。例如,你可以改变Checkbox的颜色、大小、文字颜色等: ```xml ...

    C#复选框重绘 Checkbox

    然而,Windows Forms默认的`Checkbox`样式可能无法满足所有设计需求,比如有时我们需要自定义选框的大小、添加图像或进行其他视觉上的定制。本教程将深入探讨如何在C#中实现`Checkbox`的重绘,以实现这些高级功能。 ...

    Asp.net CheckBoxList操作集合

    在ASP.NET Web Forms开发中,CheckBoxList控件是一种常用的选择组件,它允许用户从一系列选项中选择一个或多个项目。本篇文章将详细讲解如何进行CheckBoxList的操作,包括获取选中项、实现全选、取消选中以及反选...

    javafx combox内嵌checkbox

    在JavaFX中创建一个内嵌Checkbox的ComboBox,我们需要使用`ListCell`类来定制ComboBox的显示样式。下面详细介绍这个过程: 1. **自定义ListCell** ComboBox的每个选项都是由`ListCell`对象表示的。我们可以通过...

    用WPF自定义CheckBox的样式(框框和钩钩)

    在WPF(Windows Presentation Foundation)中,自定义控件样式是一项常见的需求,它允许开发者根据设计需求定制控件的外观和交互。本篇主要聚焦于如何自定义CheckBox控件的样式,特别是改变其框框(边框)和钩钩...

    WPF之CheckBox组的全选设计

    在Windows Presentation Foundation (WPF) 中,CheckBox控件经常用于用户界面中提供多选选项。在设计一个CheckBox组时,可能会遇到需要实现全选功能的需求,即点击一个主CheckBox可以同时选择或取消选择所有子...

    带CheckBox的TreeView控件

    在Windows应用程序开发中,TreeView控件常用于呈现层次结构的数据,而CheckBox则为用户提供了一种交互方式,允许他们选择或取消选择某个项。当这两者结合时,我们得到了"带CheckBox的TreeView控件",这是一个功能...

    从xml中改变checkBox大小和形状

    在Android开发中,XML文件是布局和样式的主要定义方式,其中包含了UI元素的配置和定制。本主题聚焦于如何通过XML来改变CheckBox的大小和形状,以满足个性化设计的需求。CheckBox作为用户界面中的一个常见组件,常...

    jQuery操作checkbox并获取选中值

    本文将详细讲解如何使用jQuery来操作checkbox,并实现全选、全不选、反选以及获取选中值这四个核心功能。 ### 一、jQuery选择器与checkbox操作 在jQuery中,我们可以使用不同的选择器来选取页面上的checkbox元素。...

    遍历CheckBoxList,获得选中项的值动态绑定CheckBoxList代码

    ### 遍历CheckBoxList,获得选中项的值动态绑定CheckBoxList #### 知识点一:CheckBoxList概述及应用场景 **CheckBoxList** 是ASP.NET Web Forms中一个非常有用的控件,它允许用户选择一个或多个选项。CheckBoxList...

    Android 多行多列CheckBox

    在Android开发中,"Android 多行多列CheckBox"是一个常见的需求,特别是在创建表单、设置界面或如你所述的员工报餐界面等场景。CheckBox是Android提供的一个UI组件,用于让用户选择一个或多个选项。当需要在界面上...

    完美解决ListView和CheckBox的焦点冲突及CheckBox的复用问题

    本文将详细探讨这些问题以及如何通过优化来实现“完美解决ListView和CheckBox的焦点冲突及CheckBox的复用问题”。 一、焦点冲突问题 在ListView中,通常一个列表项被点击时,焦点会自动转移到该列表项,但如果列表...

Global site tag (gtag.js) - Google Analytics