如何在黑莓中画水平线

时间:2013-10-09 07:06:53

标签: user-interface blackberry

我尝试使用以下代码绘制单行水平线,但它不起作用。我没有得到什么问题。

HorizontalFieldManager horline = new HorizontalFieldManager()
{
    protected void paint(Graphics graphics) 
    {
        super.paint(graphics);
        graphics.setColor(Color.RED);
        graphics.drawLine(5, 21,10, 20);                      
    }
};

2 个答案:

答案 0 :(得分:2)

这里至少有几个问题:

程度

字段(或管理员)的范围基本上是屏幕上该字段的大小。此大小通常由Field方法中的layout()对象设置,或由Manager方法中的sublayout()对象设置。问题是你的HorizontalFieldManager没有覆盖这些方法来设置大小(通过调用setExtent()),而且看起来你没有向管理器添加任何字段。所以,我相信你的horline经理对象的大小只有{0,0}。超出其范围的绘制无效。

Manager vs Field

Manager类是字段的容器。在这种情况下,你所拥有的只是一条线。我绝对不会使用Manager(包括Horizo​​ntalFieldManager),因为你没有在其中添加任何字段,并且添加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));