这里至少有几个问题:
程度
字段(或经理)的范围基本上是屏幕上该字段的大小。此大小通常由Field
对象在其layout()
方法中设置,或者由Manager
对象在其sublayout()
方法中设置。问题是您HorizontalFieldManager
没有覆盖这些方法来设置大小(通过调用setExtent()
),并且看起来您没有向管理器添加任何字段。因此,我相信您的horline
管理器对象的大小仅为 {0, 0}。在其范围之外绘制不会做任何事情。
经理与现场
管理器类是字段的容器。在这种情况下,您所拥有的只是一条线。我绝对不会为此使用 Manager(包括 HorizontalFieldManager),因为您没有将任何字段放入其中,并且添加 Manager 对象会产生开销。使用更轻量级的字段,或者甚至修改包含此代码的任何类的paint()
or方法......你没有向我们展示,所以我不能肯定地说。paintBackground()
如果您想用 a 表示该行Field
,那么这将起作用:
Field line = new Field() {
protected void layout(int width, int height) {
setExtent(20, 21);
}
protected void paint(Graphics g) {
int oldColor = g.getColor();
g.setColor(Color.RED);
g.drawLine(5, 21,10, 20);
g.setColor(oldColor);
}
};
add(line);
请注意,我将范围设置为 width=20, height=21,因为这些是您传递给的最大坐标drawLine()
。此外,因为您的 y 值是 20 和 21,所以这实际上不是一条真正的水平线。
添加()
这可能只是在您显示的代码中被忽略以保持问题简短,但是无论您使用经理还是字段,您都需要记住调用add()
您的字段/经理对象。创建但未添加到屏幕的对象将永远不会显示。在您的情况下,该setExtent()
问题也会导致此问题。
更新:
正如 Dinesh 在他的回答中所示,您也可以使用SeparatorField
. 但是,我相信这只会给你纯粹的水平/垂直线。由于您的代码中的坐标,我不确定您是否需要能够绘制任何方向的线......如果您这样做,那么覆盖paint()
是必要的。如果没有,请使用SeparatorField
... 但希望您也从这个答案中学到了一些东西:)。