我正在为我的BlackBerry项目创建一个搜索框,但看起来BlackBerry没有用于创建单行EditField的API。我通过扩展BasicEditField和覆盖布局和绘制等方法创建了一个自定义字段。在paint
函数体中,我使用getPreferredWidth()和getPreferredHeight()绘制一个矩形。但光标显示在EditField中的默认左上角位置。任何人都可以告诉我如何将光标绘制在我的文本所在的位置?即通过调用drawText()在EditField的中间。
答案 0 :(得分:4)
我没有收到你的问题但是。
您可以创建单行编辑字段。
BasicEditField editField = new BasicEditField(BasicEditField.NO_NEWLINE);
您可以设置光标位置。
editField.setCursorPosition(偏移);
答案 1 :(得分:3)
您可以将光标绘制到想要重写editField的onFocus方法的位置。
protected void onFocus(int direction) {
super.onFocus(direction);
this.setCursorPosition(this.getTextLength());
invalidate();
}
获得焦点后,该字段将光标定位在文本的末尾。 editField有setCursorPosition和getTextLength。
希望它有所帮助。
答案 2 :(得分:2)
谢谢你们,我从Blackberry Journal那里得到了一个很好的解决方案。
public class ScrollingSearchBox extends HorizontalFieldManager
{
private int managerWidth;
private int managerHeight;
public ScrollingSearchBox()
{
super(Manager.NO_HORIZONTAL_SCROLL);
searchEdit = new BasicEditField(){
public int getPreferredHeight()
{
return ret;
}
public int getPreferredWidth()
{
return ret;
}
public void paint(Graphics g)
{
getManager().invalidate();
super.paint(g);
}
};
HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.HORIZONTAL_SCROLL)
{
public void sublayout(int width, int height)
{
if (managerWidth == 0) {
managerWidth = searchEdit.getPreferredWidth();
}
if (managerHeight == 0) {
managerHeight = searchEdit.getPreferredHeight();
}
super.sublayout(managerWidth, managerHeight);
setExtent(managerWidth,managerHeight);
}
public void paint(Graphics g) {
super.paint(g);
}
};
searchEdit.setMaxSize(70);
hfm.add(searchEdit);
add(hfm);
}
public int getPreferredHeight()
{
int ret = 0;
return ret;
}
protected void sublayout(int maxWidth, int maxHeight)
{
int currX = 0;
int currY = 0;
Field currField;
currField = this.getField(0);
switch (ScreenConfig.getInstance().getScreen())
{
case ScreenConfig.SCREEN_320_240:
currX = 5;
currY = 3;
break;
case ScreenConfig.SCREEN_480_360:
case ScreenConfig.SCREEN_480_320:
currX = 5;
currY = 1;
break;
}
this.setPositionChild(currField, currX, currY);
this.layoutChild(currField, currField.getPreferredWidth(),
currField.getPreferredHeight());
setExtent(this.getPreferredWidth(), this.getPreferredHeight());
}
protected void paint(Graphics graphics)
{
super.paint(graphics);
graphics.drawRect(0, 0, this.getPreferredWidth(), this.getPreferredHeight());
}
}
我这样做可以帮助别人。 继续分享您的代码。 感谢。
答案 3 :(得分:1)
如果要删除光标,可以覆盖Field的drawFocus。
protected void drawFocus(Graphics graphics, boolean on) {} // remove cursor