ここには少なくともいくつかの問題があります。
範囲
フィールド (またはマネージャー)の範囲は、基本的に画面上のそのフィールドのサイズです。このサイズは通常、メソッド内のオブジェクト、またはメソッドField
内のオブジェクトによって設定されます。問題は、( を呼び出して) サイズを設定するためにこれらのメソッドをオーバーライドしておらず、マネージャーにフィールドを追加していないように見えることです。したがって、マネージャー オブジェクトのサイズは単純に {0, 0} であると思います。その範囲外に描画しても何も起こりません。layout()
Manager
sublayout()
HorizontalFieldManager
setExtent()
horline
マネージャー vs フィールド
マネージャ クラスは、フィールドのコンテナです。この場合、あなたが持っているのはラインだけです。これには絶対に Manager (HorizontalFieldManager を含む) を使用しません。これは、フィールドを何も配置していないためであり、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
ください...しかし、うまくいけば、あなたもこの答えから何かを学びました:)。