3

このインターフェースをswingで作りたい:

ここに画像の説明を入力

サイズを変更するときは、すべてのサブパネルとボタンを次のようにサイズ変更します。ここに画像の説明を入力

サイズを変更するのはメイン ウィンドウだけではありません。GridBagLayout を使用しています。そして、フレームのサイズを変更しているときに、パネルのサイズも変更するときに、GridBagLayoutを使用してパネルの境界をフレームの境界に貼り付ける方法がわかりません。

4

2 に答える 2

9

通常、これにはネストされたレイアウトを使用します。

  • JPanelaをBorderLayoutベースとして使用します。
  • 中央コンポーネントを に保存し、これを のにJPanel追加します。CENTERBorderLayout
  • 下部コンポーネントを 2 つの別々JPanelの に保管します。
  • JPanel1 行 2 列の GridLayout で別のレイアウトを作成します。
  • JPanel2 つの を正しい順序で追加します。
  • JPanelこれを の にSOUTH追加しますBorderLayout
于 2012-11-04T19:41:42.890 に答える
3

これを実現するためのプロパティ、つまり JFrame のサイズが変更されたときに JPanel 自体もサイズ変更する必要がある場合は、 になりますGridBagConstraints.BOTH。あなたのLeft JButtonRight JButtonよりも少し小さいようです。本当にGridBagLayoutでこれを実現したい場合は、ここで小さなサンプルコードを作成しました。これを見て、発生する可能性のある質問をしてください。

import java.awt.*;
import javax.swing.*;

public class GridBagExample
{
    private JPanel contentPane;

    private void displayGUI()
    {
        JFrame frame = new JFrame("GridBag Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        contentPane = new JPanel();
        contentPane.setLayout(new GridBagLayout());

        JPanel centerPanel = new JPanel();
        centerPanel.setOpaque(true);
        centerPanel.setBackground(Color.CYAN);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.FIRST_LINE_START;
        gbc.weightx = 1.0;
        gbc.weighty = 0.9;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        gbc.fill = GridBagConstraints.BOTH;  // appears to me this is what you wanted

        contentPane.add(centerPanel, gbc);

        JButton leftButton = new JButton("Left");
        JButton rightButton = new JButton("Right");
        gbc.gridwidth = 1;
        gbc.gridy = 1;
        gbc.weightx = 0.3;
        gbc.weighty = 0.1;

        contentPane.add(leftButton, gbc);

        gbc.gridx = 1;
        gbc.weightx = 0.7;
        gbc.weighty = 0.1;

        contentPane.add(rightButton, gbc);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                new GridBagExample().displayGUI();
            }
        });
    }
}

GRIDBAGEサンプル出力:

于 2012-11-05T05:00:25.240 に答える