Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Blackberry-自定义编辑字段光标_Blackberry_Java Me - Fatal编程技术网

Blackberry-自定义编辑字段光标

Blackberry-自定义编辑字段光标,blackberry,java-me,Blackberry,Java Me,我正在为我的BlackBerry项目创建一个搜索框,但BlackBerry似乎没有用于创建单行EditField的API。我通过扩展BasicEditField和覆盖layout和paint等方法创建了一个自定义字段。在函数体中,我用getPreferredWidth()和getPreferredHeight()绘制了一个矩形。但光标显示在EditField的默认左上角位置。谁能告诉我怎样才能把光标画在文本所在的位置?也就是说,在编辑字段中间调用DrutTrk()。 < p>我没有得到你的问题。

我正在为我的BlackBerry项目创建一个搜索框,但BlackBerry似乎没有用于创建单行EditField的API。我通过扩展BasicEditField和覆盖layout和paint等方法创建了一个自定义字段。在函数体中,我用getPreferredWidth()和getPreferredHeight()绘制了一个矩形。但光标显示在EditField的默认左上角位置。谁能告诉我怎样才能把光标画在文本所在的位置?也就是说,在编辑字段中间调用DrutTrk()。

< p>我没有得到你的问题。p>
  • 您可以创建单行编辑字段

    BasicEditField editField=新建BasicEditField(BasicEditField.NO_新行)

  • 您可以设置光标位置

    editField.setCursorPosition(偏移量)


  • 您可以在重写editField的onFocus方法时,将光标绘制在需要它的位置

            protected void onFocus(int direction) {
                super.onFocus(direction);
                this.setCursorPosition(this.getTextLength());
                invalidate();
            }
    
    获得焦点后,字段将光标定位在文本的末尾。editField具有setCursorPosition和getTextLength


    希望有帮助。

    谢谢你们,我从黑莓杂志上得到了一个很好的解决方案

    公共类滚动搜索框扩展了HorizontalFieldManager
    {
    私人内部管理器宽度;
    私人内部管理权;
    公共滚动搜索框()
    {
    超级(管理器。无水平滚动);
    searchEdit=newbasiceditfield(){
    public int getPreferredHeight()
    {                 
    返回ret;
    }
    public int getPreferredWidth()
    {                    
    返回ret;
    }
    公共空间涂料(图g)
    {
    getManager().invalidate();
    超级油漆(g);
    }
    };
    HorizontalFieldManager hfm=新的HorizontalFieldManager(Manager.HORIZONTAL\u滚动)
    {
    公共空隙子布局(整幅宽度、整幅高度)
    {
    if(managerWidth==0){
    managerWidth=searchEdit.getPreferredWidth();
    }
    if(managerHeight==0){
    managerHeight=searchEdit.getPreferredHeight();
    }
    超级。次级布局(经理宽度、经理宽度);
    setExtent(managerWidth、managerWight);
    }
    公共空间涂料(图g){
    超级油漆(g);
    }
    };
    searchEdit.setMaxSize(70);
    hfm.add(searchEdit);
    添加(hfm);
    }
    public int getPreferredHeight()
    {
    int-ret=0;
    返回ret;
    }
    受保护的空位子布局(int-maxWidth、int-maxHeight)
    {
    int currX=0;
    int currY=0;
    场电流场;
    currField=this.getField(0);
    开关(ScreenConfig.getInstance().getScreen())
    {
    案例ScreenConfig.SCREEN_320_240:
    currX=5;
    咖喱=3;
    打破
    案例ScreenConfig.SCREEN_480_360:
    案例ScreenConfig.SCREEN_480_320:
    currX=5;
    咖喱=1;
    打破
    }
    this.setPositionChild(currField、currX、currY);
    this.layoutChild(currField,currField.getPreferredWidth(),
    currField.getPreferredHeight());
    setExtent(this.getPreferredWidth(),this.getPreferredHeight());
    }
    受保护的空心漆(图形)
    {
    超级油漆(图形);
    graphics.drawRect(0,0,this.getPreferredWidth(),this.getPreferredHeight());
    }
    } 
    
    我这样做是为了帮助别人。 继续分享你的代码。
    谢谢。

    如果要删除光标,可以覆盖字段的drawFocus

    protected void drawFocus(Graphics graphics, boolean on) {} // remove cursor
    

    尝试重写拉焦焦点来处理焦点拖放位置,可以设置光标的位置,但不能处理它在中间的连续绘制。