gpt4 book ai didi

blackberry - 光标未出现在 Blackberry 的 Editfield 中

转载 作者:行者123 更新时间:2023-12-01 12:51:45 25 4
gpt4 key购买 nike

光标没有出现在 Editfield..

代码如下..

ef_mob = new EditField("", "", 11, EditField.NO_NEWLINE|EditField.FILTER_NUMERIC|EditField.FOCUSABLE) {
protected void paint(Graphics graphics) {
graphics.setColor(Color.WHITE);
// graphics.drawRoundRect(0, 0, getWidth()-(getWidth()/10), getHeight(), 5, 5);

graphics.fillRoundRect(0, 0, getWidth()-(getWidth()/10), getHeight(), 5, 5);
graphics.setColor(Color.BLACK);

graphics.drawText(ef_mob.getText(), 0, 0);
super.paint(graphics);
}
};

问题是什么?

最佳答案

EditField 上正确绘制圆角矩形背景需要大量工作,这有点愚蠢,但它看起来像 others have had this problem, too

方案一

如果您采用 Peter Strange 对该问题的回答,您的代码可能类似于下面发布的 MobEditField。我将您的匿名 EditField 类拆分为一个单独的类,因为添加了很多代码。如果你真的想要,你可以将代码保留为匿名类(我认为这对可读性来说真的很糟糕)。

private class MobEditField extends EditField {
private boolean _drawFocus = false;

public MobEditField() {
super("", "", 11, EditField.NO_NEWLINE|EditField.FILTER_NUMERIC|EditField.FOCUSABLE);
}

protected void paint(Graphics graphics) {
if (!_drawFocus) {
int oldColor = graphics.getColor();

graphics.setColor(Color.WHITE);
graphics.fillRoundRect(0, 0, getWidth() - (getWidth() / 10), getHeight(), 5, 5);

graphics.setColor(Color.BLACK);
graphics.drawText(getText(), 0, 0);

graphics.setColor(oldColor);
}
super.paint(graphics);
}

protected void drawFocus(Graphics graphics, boolean on) {
_drawFocus = on;
super.drawFocus(graphics, on);
_drawFocus = false;
}

protected void onFocus( int direction ) {
super.onFocus( direction );
invalidate();
}

protected void onUnfocus() {
super.onUnfocus();
invalidate();
}
}

然后你就这样做:

ef_mob = new MobEditField();

注意几点:

  1. 不要从匿名类的paint() 方法中调用ef_mob.getText()。只需调用 getText()。我什至不知道您的原始代码是如何编译的。
  2. 最好在覆盖 paint() 方法时保存初始的 Graphics 对象颜色(或 alpha,或任何您更改的颜色),然后重新设置它在最后。
  3. 重写了 onFocus()onUnfocus() 方法以强制重绘
  4. paint() 方法仅让 super.paint() 在字段获得焦点时完成所有工作。根据您希望字段的外观,您可能需要稍微调整一下。

方案二

另一种对我有用的替代方法是利用 EditField 具有的未记录 paintBackground() 方法。当然,使用未记录的方法总是有缺点的。所以,我只提供它作为一个选项:

        ef_mob = new EditField("", "", 11, EditField.NO_NEWLINE|EditField.FILTER_NUMERIC|EditField.FOCUSABLE) {
protected void paint(Graphics graphics) {
int oldColor = graphics.getColor();

graphics.setColor(Color.BLACK);
graphics.drawText(getText(), 0, 0);

graphics.setColor(oldColor);
super.paint(graphics);
}

protected void paintBackground(Graphics g) {
int oldColor = g.getColor();
g.setColor(Color.WHITE);
g.fillRoundRect(0, 0, getWidth()-(getWidth()/10), getHeight(), 5, 5);
g.setColor(oldColor);
}

};

在这里,我将 fillRoundRect() 调用从 paint() 移到了 paintBackground() 中。

关于blackberry - 光标未出现在 Blackberry 的 Editfield 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com