我正在尝试输入字符来填充编辑字段,如果文本仍在第一行我没有问题,但是当第一行已满时,它会转到下一行,我收到以下错误:
0:01:56.609: Uncaught: StackOverflowError
这是我的custom_editfield:
public class Custom_EditField extends EditField {
int width, row;
Custom_EditField(long style, int width, int row) {
super(style);
this.width = width;
this.row = row;
}
public int getPreferredHeight() {
return Font.getDefault().getHeight() * row;
}
public int getPreferredWidth() {
return width;
}
protected void layout(int maxWidth, int maxHeight) {
super.layout(maxWidth,
Math.min(maxHeight, Font.getDefault().getHeight() * row));
super.setExtent(maxWidth,
Math.min(maxHeight, Font.getDefault().getHeight() * row));
}
/*public int drawText(Graphics graphics, int offset, int length, int x,
int y, DrawTextParam drawTextParam) {
graphics.setBackgroundColor(Color.GRAY);
graphics.clear();
graphics.setColor(Color.BLACK);
int labelWidth = getFont().getAdvance(getLabel());
graphics.drawRect(labelWidth, 0, getWidth() - labelWidth, getHeight());
return graphics.drawText(
this.getText().substring(offset, offset + length), x, y);
}*/
protected void paint(Graphics graphics) {
int rectHeight = getPreferredHeight();
int rectWidth = getPreferredWidth();
graphics.setBackgroundColor(Color.GRAY);
graphics.clear();
graphics.setColor(Color.BLACK);
graphics.drawRect(0, 0, rectWidth, rectHeight);
super.paint(graphics);
}
}
我还注意到光标是透明的。你认为光标会导致这个问题吗?
这是我称之为编辑字段
extends VerticalFIeldManager
protected void sublayout(int width, int height) {
comments = new Custom_EditField(Field.FIELD_HCENTER
| Field.FIELD_VCENTER | Field.FOCUSABLE,
getPreferredWidth() - 10, 3);
add(comments);
namelabel = new Custom_LabelField("姓名:", DrawStyle.ELLIPSIS
| LabelField.USE_ALL_WIDTH | DrawStyle.LEFT | Field.FIELD_LEFT);
namelabel.setFont(Font.getDefault().derive(Font.BOLD, 20));
namelabel.setFontColor(Color.BLACK);
add(namelabel);
postbtn = new ButtonField("留言", DrawStyle.HCENTER | Field.FIELD_RIGHT);
postbtn.setPadding(0, 20, 0, 20);
postbtn.setChangeListener(this);
add(postbtn);
name = new Custom_EditField(Field.FIELD_HCENTER | Field.FIELD_VCENTER
| Field.FOCUSABLE, getPreferredWidth()
- namelabel.getPreferredWidth() - postbtn.getContentWidth() - 5
* 4, 1);
add(name);
Field field = getField(0);
layoutChild(field, getPreferredWidth() - 10,
comments.getPreferredHeight());
setPositionChild(field, 5, 5);
field = getField(1);
layoutChild(field, Font.getDefault().getAdvance(namelabel.getText()),
namelabel.getContentHeight());
setPositionChild(field, 5, comments.getPreferredHeight() + 5 * 2);
field = getField(2);
layoutChild(field, postbtn.getPreferredWidth() + postbtn.getWidth(),
name.getPreferredHeight());
setPositionChild(field, getPreferredWidth() - (postbtn.getWidth() + 5),
comments.getPreferredHeight() + 5 * 2);
field = getField(3);
layoutChild(field, getPreferredWidth() * 2 / 3,
name.getPreferredHeight());
setPositionChild(field, namelabel.getWidth(),
comments.getPreferredHeight() + 5 * 2);
width = Math.min(width, getPreferredWidth());
height = Math.min(height, getPreferredHeight());
setExtent(width, height);
}