2011-10-03 11 views
9

私はフローレイアウトのパネルを持っており、1から2000までの可変数の項目を含めることができます。スクロールペイン内に配置し、垂直方向にスクロールし、幅を固定したいと考えています。問題は、パネルの好みのサイズを(800,600)のようなものに設定すると、いくつかのアイテムが欠けていて、スクロールがないということです。スクロールペインの優先サイズを設定すると、フローペインのすべての要素が1つの非常に長い行に配置されます。フローレイアウトでPanelの好ましい幅のみを設定する方法は?

要素の最大サイズを設定すると、何もしないように見えます。レイアウトマネージャはそれを無視します。

どうすればこの問題を解決できますか?

+1

「1から本当に大きな数字」はいくつかの論理があります – mKorbel

+0

いくつかのより良い数字を追加しました:私の悪い英語を許してください。 – Rogach

+2

です。ない。つかいます。 setXXSize。代わりに適切なLayoutManagerを使用してください – kleopatra

答えて

3

これを行うには、BoxLayoutを使用することができます。もちろん

JPanel verticalPane = new JPanel(); 
verticalPane.setLayout(new BoxLayout(verticalPane, BoxLayout.Y_AXIS)); 

JScrollPane pane = new JScrollPane(verticalPane); 

//add what you want to verticalPane 
verticalPane.add(new JButton("foo")); 
verticalPane.add(new JButton("bar")); 

これを追加した各コンポーネントの推奨サイズを使用します。あなたはJPanelの例のための推奨サイズを変更したい場合は、それを拡張してのgetPreferredSizeをオーバーライドします。

class MyPanel extends JPanel(){ 
    public Dimension getPreferredSize(){ 
     return new Dimension(100,100); 
    } 
} 

注:BoxLayoutはないかもしれない他のLayoutManager、考慮のgetPreferredSizeになります。

私の答えを批判してください、私はそれが完全に正しいとは確信していません、私は問題を理解したかどうかを知るために異議を聞くことが好奇心です。

+3

'これはもちろん、追加された各コンポーネントの推奨サイズを使用します。間違っている(または完全に正しくない、「使用」とは何かを意味します);-) LayoutManagersは、ヒントコンポーネントによって与えられる。 getXXSizeをオーバーライドすることは正しい方向ですが、ハードコードされた値は設定するほど悪いです。まともなLayoutManagerを使用して、必要なサイジングルールを設定するだけです。 – kleopatra

4

私は垂直方向のスクロール、スクロールペインの内側にそれを置きたい、と固定幅

であなたは、このためにWrap Layoutを使用することができます。

パネルの推奨サイズを設定しないでください。しかし、frame.pack()メソッドが機能するように、スクロールペインの適切なサイズを設定することができます。

関連する問題