2016-04-22 12 views
3

JPanelのセットはJFrameの範囲内にあります。パネルの1つにJTextAreaが含まれています。現時点で私はこれを次のように作成します:JTextAreaのサイズ

JTextArea = new JTextArea(5, 40); 

これは私に(およそ)40列で5行のテキスト領域を与えます。

これは垂直方向に動作しますが、領域は親コンテナの高さ全体を塗りつぶします。おそらく親がその行に配置されている唯一の要素であるためです。

横の横幅は、下の要素によって決まり、通常はJTextAreaよりも広くなります。だから私は両側に大きなマージンを持つテキストエリアで終わる。さらに悪いことに、テキスト領域が親コンテナの幅とまったく同じになるようにフレームのサイズを小さくすると、突然「フリック」して1行上のテキスト領域に変わり、次に親の幅になります。

この問題をうまく説明している下の原図をお伝えください。要するに

enter image description here

:どのように私はいつもそれが利用可能な最大のスペースを埋めるJTextAreaを作成するには? (そして、ユーザは、フレームがさらに小さくサイズ場合、スクロールバーが表示された後、最小の幅と可能な場合)

答えて

1

JTextAreaに(図面内パネル1と表記)の親コンテナで、関数を呼び出す:

あなたが唯一のパネル1内の単一の子を持っているとして

https://docs.oracle.com/javase/7/docs/api/java/awt/BorderLayout.html

、パネル1のBorderLayoutのレイアウトマネージャは、デフォルトですべて使用するテキスト領域をストレッチします。参考のため

panel1.setLayout(new BorderLayout()); 

、このドキュメントのページをご覧ください親コンテナの使用可能な領域

TextAreaのサイズを指定するコンストラクタパラメータを取り除きたい場合があります。 BorderLayoutのがあなたのためにサイズの世話をする必要があります:)

をあなたはそのスイングを要求することができます呼び出すことによって、テキスト領域のための特定の最小サイズを尊重:スタートoficial Oracle docu about layout managersを見るため

textArea.setMinimumSize(new Dimension(minimum_width, minimum_height)); 
+0

とてもうまく動作します。ありがとうございます。 – Lieuwe

1

あなたは、レイアウトマネージャを使用する必要があります。状況に応じて、BorderLayoutまたはGridBagLayoutが正常に動作するはずです。

でスタート:

GridBagLayout
panel1.setLayout(new BorderLayout()); 

または

panel1.setLayout(new GridBagLayout()); 

あなたはもっとpreciselly( - これ以上、劣らあなたは5つの分野を持っていないBorderLayoutで)レイアウトすることができます。 GridBagLayoutでは、より複雑なレイアウトを行うことができます。