1

次のコードを試して、1 本の水平線を描画しましたが、機能しません。何が問題なのかわかりません。

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

2 に答える 2

2

ここには少なくともいくつかの問題があります。

範囲

フィールド (またはマネージャー)の範囲は、基本的に画面上のそのフィールドのサイズです。このサイズは通常、メソッド内のオブジェクト、またはメソッドField内のオブジェクトによって設定されます。問題は、( を呼び出して) サイズを設定するためにこれらのメソッドをオーバーライドしておらず、マネージャーにフィールドを追加していないように見えることです。したがって、マネージャー オブジェクトのサイズは単純に {0, 0} であると思います。その範囲外に描画しても何も起こりません。layout()Managersublayout()HorizontalFieldManagersetExtent()horline

マネージャー vs フィールド

マネージャ クラスは、フィールドのコンテナです。この場合、あなたが持っているのはラインだけです。これには絶対に Manager (Horizo​​ntalFieldManager を含む) を使用しません。これは、フィールドを何も配置していないためであり、Manager オブジェクトを追加するとオーバーヘッドが発生します。軽量のフィールドを使用するか、このコードを含むpaint()クラスのorpaintBackground()メソッドを変更することもできます...あなたはそれを示していないので、確かなことは言えません。

で線を表現したい場合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 であるため、これは実際には真の水平線ではありません。

追加()

これは、質問を短くするために表示するコードから省略されているだけかもしれませんが、使用するのが Manager か Field かに関係なくadd()、field/manager オブジェクトを呼び出すことを忘れないでください。作成されたが画面に追加されていないオブジェクトは表示されません。あなたの場合、問題はこの問題引き起こしたsetExtent()でしょう。


アップデート:

Dinesh が回答で示しているように、を使用して問題を解決することSeparatorFieldできます。ただし、純粋に水平/垂直の線しか得られないと思います。コードの座標のため、任意の方向の線を描画する機能が必要かどうかはわかりませんでした...必要な場合は、オーバーライドpaint()が必要です。そうでない場合は、使用してSeparatorFieldください...しかし、うまくいけば、あなたもこの答えから何かを学びました:)。

于 2013-10-09T07:27:45.533 に答える
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));
于 2013-10-09T07:27:30.110 に答える