1

リッチテキストフィールドを変更して、水平フィールドの半分に正しく表示されるようにしようとしています。目標はこれです:

---------------------------
| address is | ***********|
| very long  | ** IMAGE **|
| state, zip | ***********|
---------------------------

ここで、addressは、cityおよびzipとは別の単一の文字列です。私は次のようにアドレスフィールドを変更しています:

RichTextField addrField = new RichTextField(address) {
    public int getPreferredWidth() { 
     return 200; 
    }

    protected void layout(int maxWidth,int maxHeight) {
     super.layout(getPreferredWidth(),maxHeight);
     setExtent(getPreferredWidth(), getHeight());
    }
};

結果は次のようになります。

-----------------------------
| address is ve| ***********|
| state, zip   | ** IMAGE **|
|              | ***********|
-----------------------------

明らかに、住所は画像の下にあります。両方の水平フィールドは静的な200ピクセル幅です。システムがアドレスをラップする場所を知らないわけではありません。ただし、これを行うのは簡単ではなく、自動的に行われないと聞いています。

私はオンラインで直接の答えを見つけることに成功していません。カスタムレイアウトマネージャーでそれを行う必要があると言う人がいます。RichTextFieldAPIを参照している人もいますが、これは役に立ちません。しかし、実際にそれを行う方法については誰も言及していません。

文字ごとに読み、改行が発生する場所を設定する必要があるかもしれないことを理解しています。私が知らないのは、これをどのように正確に行うかです。文字を数えるだけで、それぞれが5ピクセルの価値があると想定することはできません。また、そうする必要はありません。確かに、理にかなっている方法でこれを達成するための何らかの方法がなければなりません。

助言がありますか?

4

1 に答える 1

0

あなたの問題に対する正確な解決策はありませんが、テキストの幅を測定するという点では、フィールドで使用されているフォントの Font オブジェクトへの参照がある場合は、Font.getAdvance()を呼び出して取得できます指定されたテキストの幅 (ピクセル単位)。これは、テキストに手動で区切りを挿入する必要がある場合に役立ちます。

于 2010-04-26T22:27:16.620 に答える