10

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

任意の要素に最大サイズを設定しても、まったく何も起こらないようです。レイアウト マネージャーはそれを無視します。

どうすればこれを修正できますか?

4

2 に答える 2

5

スクロールペイン内に配置し、垂直方向にスクロール可能で、幅を固定したい

これには、ラップ レイアウトを使用できます。

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

于 2011-10-03T15:26:18.540 に答える
4

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 は getPreferredSize を考慮しますが、他の LayoutManager は考慮しない場合があります。

私の答えを批判してください。完全に正しいかどうかはわかりません。問題を理解しているかどうかを知るために、反対意見を聞きたいと思っています。

于 2011-10-03T10:47:47.490 に答える