java - 黑莓自动完成字段上的占位符文本

标签 java blackberry autocomplete

我已在 Blackberry 应用程序的一个屏幕中放置了一个 AutoCompleteField 。我必须显示占位符文本来为用户输入信息提供提示。

这是AutoCompleteField的以下代码

BasicFilteredList filterList = new BasicFilteredList();
        String[] address = { "T 115 Centro Galleria Shopping Centre, Cnr Old Collier and Walters Road Morley WA 1522", 
                "1423 SEAVIEW POINT POINT COOK VIC 2674",
                "Lot 1498 Yarraman Road Wyndham Vale VIC 3795", 
                "Lot 3506 Witchmount Close Hillside VIC 4055",
                "6 Paas Place Williamstown VIC 4233", 
                "Lot 99 14 James Close Sunbury VIC 4502", 
                "1 Charlotte Street Clayton South VIC 4779" };

        filterList.addDataSet(1, address, "address", BasicFilteredList.COMPARISON_IGNORE_CASE);
        AutoCompleteField autoCompleteField = new AutoCompleteField(filterList){
            public void onSelect(Object selection, int SELECT_TRACKWHEEL_CLICK) {
                 ListField _list = getListField();
                 if (_list.getSelectedIndex() > -1) {
                     if(selectedText!=null){
                         BasicFilteredListResult result = (BasicFilteredListResult) selection;
                         selectedText.setText(result._object.toString());
                     }
                 }
             }
        };
        add(autoCompleteField);

任何人,请建议我如何实现同样的功能。

谢谢。

最佳答案

您可以使用与 the one shown here for normal EditFields 类似的技术。基本上,您需要重写 AutoCompleteField 子类中的 paint() 方法。在 paint() 中,您检查并查看该字段是否为空,如果是,则手动绘制所需的占位符文本。

不同之处在于,AutoCompleteField 是一个Manager,其中包含一个BasicEditField。因此,要正确绘制文本,您需要计算出父 Manager(AutoCompleteField)内编辑字段的 x 和 y 偏移量。

因此,将您的 AutoCompleteField 实例替换为此类的实例:

   private class CustomAutoCompleteField extends AutoCompleteField {
      private int yOffset = 0;
      private int xOffset = 0;

      public CustomAutoCompleteField(BasicFilteredList filteredList) {
         super(filteredList);
      }

      protected void paint(Graphics g) {
         super.paint(g);
         if (xOffset == 0) {
            // initialize text offsets once
            xOffset = getEditField().getContentLeft();
            yOffset = getEditField().getContentTop();
         }
         String text = getEditField().getText();
         if (text == null || text.length() == 0) {
            int oldColor = g.getColor();
            g.setColor(Color.GRAY);
            g.drawText("enter text", xOffset, yOffset);
            g.setColor(oldColor);
         }
      }

      public void onSelect(Object selection, int SELECT_TRACKWHEEL_CLICK) {
         ListField _list = getListField();
         if (_list.getSelectedIndex() > -1) {
            if(selectedText!=null){
               BasicFilteredListResult result = (BasicFilteredListResult) selection;
               selectedText.setText(result._object.toString());
            }
         }
      }
   }

我在 OS 5.0 上对此进行了测试,其中的实例没有设置任何边距或填充。对于不同的布局,您可能需要调整计算 x 和 y 偏移的逻辑。但是,上面的代码向您展示了基本思想。祝你好运。

编辑:上面的代码带有警告,您的 onSelect() 方法显然依赖于未显示的代码。按照原样,上面的代码将无法编译。我将 onSelect() 留在那里只是为了表明我本质上只是替换了您最初拥有的匿名类,并且在您的 onSelect() 方法中没有做任何不同的事情,因为它与占位符文本问题没有直接关系。

关于java - 黑莓自动完成字段上的占位符文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10855309/

相关文章:

java - 在 Blackberry 应用程序中阅读邮件

c# - AjaxControlToolkit 自动完成字典

javascript - ACE 编辑器中的自动完成

java - 试图在 asp.net 和 jsp 之间做出决定

java - 如何在我的应用程序中包含 Skylark 配置解析器?

blackberry - 预测输入已关闭,但仍然弹出单词建议框

php - jQuery 自动完成不适用于动态表单字段

java - 使用 JPA 将 LocalDate 存入数据库

java - 使用ForeignCollectionField创建ORMlite对象

iphone - 企业原生移动应用程序开发