-1

JPanelサイズ変更可能でスクロール可能で、x より小さい内部パネルを含むを作成しようとしています。各インナーパネルは、必要に応じて幅を広げることができます。しかし、深さは好ましいサイズでなければなりません。

お気に入り:

ここに画像の説明を入力

これまでのところ、私のコードは次のとおりです。

public class TestSize {

    public static void main(String[] args) {

        JFrame F = new JFrame();
        F.setVisible(true);
        JPanel P = new JPanel();
        P.setLayout(new BorderLayout());
        JScrollPane scrollPane = new JScrollPane(P);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        scrollPane.setPreferredSize(new Dimension(900,900));//.setBounds(50, 30, 300, 50);

        JPanel S = new JPanel();
        S.setBackground(Color.GREEN);
        S.setPreferredSize(new Dimension(900,200));
            JPanel S2 = new JPanel();
        S2.setBackground(Color.GREEN);
        S2.setPreferredSize(new Dimension(900,200));
            P.add(S,BorderLayout.NORTH);
            P.add(S2,BorderLayout.NORTH);


        F.add(scrollPane);
        F.pack();
        F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}

ここに画像の説明を入力

しかし、単一の内部パネルを追加すると、すべてのスペースが垂直方向に埋められます-これは私が望むものではありません:

4

2 に答える 2

0
//P.setLayout(new BorderLayout());

レイアウトを BorderLayout に設定したのはなぜですか? NORTH には 1 つのコンポーネントしか追加できません。それはあなたが望むものですか?レイアウト マネージャーの使用に関する Swing チュートリアルのセクションを読み、より適切なレイアウト マネージャーを選択してください。Swing プログラミングの基本が説明されているので、チュートリアルのリンクをブックマークしてください。

scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

なぜこれらのプロパティを設定したのですか? これらはデフォルト値です。

scrollPane.setPreferredSize(new Dimension(900,900));

高さを 900 に設定するのはなぜですか。スクロールペインに高さ 200 のコンポーネントのみを含めたいですか? 一般に、優先サイズを設定するべきではありません。frame.pack() メソッドに任せてください。

S.setBackground(Color.GREEN);

両方のパネルの背景色を同じに設定するのはなぜですか。2 つのパネルが追加されたかどうかは、どうすればわかりますか? 簡単に視覚化するために、それらを異なる色にします。

于 2013-11-13T17:56:00.313 に答える
0

BoxLayout では、非表示のコンポーネントをフィラーとして使用するさまざまな方法があります。内側のパネルの数を可変にしたいので、「リジッド エリア」を使用する必要はないと思います。垂直グルーまたはカスタム Box.Filler を使用してみてください。

もう 1 つの解決策は、JFrame と を使用する ScrollPane の間に JPanel を配置し、スクロールBorderLayoutペインBorderLayout.NORTHをそのパネルの に配置することです。のコンポーネントはBorderLayout.NORTH水平方向にサイズ変更されますが、垂直方向にはサイズ変更されません。基本的に、それらはパネルの上部に押し出されます。

編集:

次のようなものが必要になると思います。

    JFrame F = new JFrame();
    F.setVisible(true);
    F.setLayout(new BorderLayout());
    JPanel P = new JPanel(new BoxLayout(P, BoxLayout.PAGE_AXIS));
    JScrollPane scrollPane = new JScrollPane(P);

    JPanel S = new JPanel();
    S.setBackground(Color.GREEN);
    JPanel S2 = new JPanel();
    S2.setBackground(Color.BLUE);
    P.add(S);
    P.add(S2);

    F.add(scrollPane, BorderLayout.NORTH);
    F.pack();
    F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

サイズ変更可能にしたいと言ったので、フレームの優先サイズを設定する理由がわかりません。このようにして、内側のパネルにぴったりとはまります。

于 2013-11-13T16:15:54.983 に答える