我尝试使用以下代码绘制单行水平线,但它不起作用。我没有得到什么问题。
HorizontalFieldManager horline = new HorizontalFieldManager()
{
protected void paint(Graphics graphics)
{
super.paint(graphics);
graphics.setColor(Color.RED);
graphics.drawLine(5, 21,10, 20);
}
};
答案 0 :(得分:2)
这里至少有几个问题:
字段(或管理员)的范围基本上是屏幕上该字段的大小。此大小通常由Field
方法中的layout()
对象设置,或由Manager
方法中的sublayout()
对象设置。问题是你的HorizontalFieldManager
没有覆盖这些方法来设置大小(通过调用setExtent()
),而且看起来你没有向管理器添加任何字段。所以,我相信你的horline
经理对象的大小只有{0,0}。超出其范围的绘制无效。
Manager类是字段的容器。在这种情况下,你所拥有的只是一条线。我绝对不会使用Manager(包括HorizontalFieldManager),因为你没有在其中添加任何字段,并且添加Manager对象会有开销。使用更轻量级的字段,或者甚至修改{em>包含这个代码的paint()
或paintBackground()
方法...你没有告诉我们,所以我不能肯定地说。
如果您想用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
...但希望您也从这个答案中学到了一些东西:)。
答案 1 :(得分:1)
使用此
HorizontalFieldManager horline = new HorizontalFieldManager()
{
protected void paint(Graphics graphics)
{
super.paint(graphics);
graphics.setColor(Color.RED);
}
};
horline.add(new SeparatorField(SeparatorField.LINE_HORIZONTAL|SeparatorField.VISUAL_STATE_FOCUS));