将持有者文本放在黑莓中的AutoCompleteField上

时间:2012-06-01 18:11:44

标签: 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);

任何人,请建议我如何实现相同的目标。

感谢。

1 个答案:

答案 0 :(得分:2)

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

不同之处在于AutoCompleteFieldManager,内部有BasicEditField。因此,要正确绘制文本,您需要确定父ManagerAutoCompleteField)中编辑字段的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()方法中做任何不同的事情,因为它与占位符文本问题没有直接关系