2017-03-15 8 views
0

JTextAreaのgetLineCount関数の戻り値に基づいてScrollPaneに高さを設定しようとしています。 Dimension of ScrollPaneで値を高さに設定すると、それは本当に小さいです。私は* 20を追加して、私が期待しているものに最も近い結果を得ました。 しかし、このトリックでは、getLineCountの数値が高いほど精度は低くなります。これは、JScrollPaneの高さが私が望むものよりも大きくなることを意味します。JTextArea行数の値をDimension height_JAVAに変換する方法

これらの間のメトリックを変換するには、式が必要です。しかし、私はint値であることを除いて、どのメトリックが返されているのか正確には分かりません。

これら2つを変換する組み込みのライブラリがある場合は、同様に便利かもしれません。 この問題に関するオンライン投稿は多くありません。誰もこの問題に遭遇しましたか?

int height= textArea.getLineCount(); 
JScrollPane scrollPane = new JScrollPane(textArea); 
scrollPane.setPreferredSize(new Dimension(1, height* 20)); 
+2

この点は何ですか?スクロールペインのサイズをテキスト領域のサイズに変更しようとすると、スクロールペインは必要ありません。 – camickr

+0

['JTextArea#setRows'](https://docs.oracle.com/javase/8/docs/api/javax/swing/JTextArea.html#setRows-int-) – MadProgrammer

+0

@camickr質問をよくしています。私は、一般的に、スクロールペインに一定の高さを設定するのは無意味だと知っています。しかし、JTextAreaの全文を見るには、この段階で一定の高さを設定する必要があります。将来、特定の高さに縮小する機能を実装します。縮小されたら、スクロールペインでスクロールバーを使用します。将来の実装を容易にするために、私はこの段階でスクロールバーを無効にしてスクロールペインを使用します。 –

答えて

3

これのポイントは何ですか?スクロールペインのサイズをテキスト領域のサイズに変更しようとすると、スクロールペインは必要ありません。

サイズを管理しないでください。 setPreferredSize()メソッドを使用しないでください。

代わりにJTextAreasetRows(...)メソッドを使用して、スクロールせずにテキスト領域に表示する行数を定義できます。

これにより、テキスト領域の行とフォントに基づいてテキスト領域の優先サイズを決定できます。スクロールペインのサイズは自動的にテキスト領域のサイズに合わせられます。

さらに多くの行のデータが追加されると、スクロールバーが表示されます。

+0

私はあなたのアドバイスのおかげでそれを解決しました。しかし、私はtextArea.setRows(textArea.getLineCount());を使用しました。私はtextArea.getRows()から行を取得しました。 textArea.setAlignmentX(rows)で、textAreaの高さを設定します。私はscrollPaneからsetPreferredSizeを削除しました。あなたが言ったように、スクロールペインはtextAreaの高さに調整されます。ありがとうございました! –

1

あなたがやっているように、各行の高さが1ピクセルになるように高さの値を設定しています。

グラフィックスにフォントが設定されているGraphics.getFontMetrics().getHeight()で行番号を掛けます。それはあなたの問題を解決するはずです

+0

ご連絡ありがとうございます。 FontクラスにはgetHeight関数がありません。 getSize ..という意味ですか?またはJTextAreaのテキストを意味します! –

+0

@ In-youngChoungいいえ、getSizeではありません。私は私の答えを訂正しました – ControlAltDel

+0

@ In-youngChoungもう一度、申し訳ありません。再び修正されました。私はそれが今だと思います – ControlAltDel

関連する問題