1

JTextArea を使用して長いテキストを表示しています

JTextArea _definition = new JTextArea(5, 50);

ワードラップあり

_definition.setLineWrap(true);
_definition.setWrapStyleWord(true);

JScrollPane に埋め込まれた

add(new JScrollPane(_definition), gbc);

これらはすべて、GridBagLayout を持つ JPanel の一部です。

短いテキストではすべて正常に動作しますが、長いテキストを行折り返しで追加し、スクロールバーが必要な場合、pack() が南に移動し、すべてのコンポーネントのサイズが最小になり、ダイアログが使用できなくなります (TextArea だけではありません)。影響を受ける)。

何が起こっているのかを把握しようとしましたが、把握できたのは、それが TextArea 内のテキストに関係していることだけです。私は立ち往生しています..何かアイデアはありますか?ありがとう!

4

2 に答える 2

4

2回電話してみてくださいpack()JTextArea には、Java バグ データベースのこのエントリで説明されているように、いくつかの奇妙な動作があります。優先サイズは、最初は非常に幅の広い 1 行のエントリとして報告されます (たとえば、1 行、1000 列)。それが特定の幅であることを認識すると、必要な行数の適切なサイズが報告されます。

この動作を回避するために、JTextArea をサブクラス化し、その動作を少し賢く変更するなど、さまざまなことを行う必要がありました。pack()この場合、Doubleがうまくいくか、レイアウト内のすべてがどのように適合するかに応じて、より複雑な調整に頼らなければならない場合があります。

于 2009-01-18T19:46:59.927 に答える
2

うまくいきました..ロスの答えは、検索するためのより良い用語を私に与えていたので、正しい方向を指して助けてくれてありがとう!

 pack();
 _definition.setSize(_definition.getPreferredSize());
 pack();

したがって、二重パッキングに加えて、いくつかの余分な...奇妙な動作。

于 2009-01-18T21:04:53.530 に答える