1

私はGridBagLayoutを使用して、次のコードでGUIコンポーネントを配置し、コンポーネントを1列に1つずつ、ギャップなしで配置したいと考えています。

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestGUI extends JFrame{

    public TestGUI(){

        JPanel bigPanel = new JPanel(new GridBagLayout());
        JPanel panel_a = new JPanel();
        JButton btnA = new JButton("button a");
        panel_a.add(btnA);

        JPanel panel_b = new JPanel();
        JButton btnB = new JButton("button b");
        panel_b.add(btnB);

        GridBagConstraints c = new GridBagConstraints();
        c.gridx = 0;
        c.gridy = 0;
        c.weighty = 1D;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.anchor = GridBagConstraints.NORTH;
        bigPanel.add(panel_a, c);

        c.gridx = 0;
        c.gridy = 1;
        c.fill = GridBagConstraints.HORIZONTAL;
        bigPanel.add(panel_b, c);

        this.add(bigPanel);
    }

    public static void main(String[] args) {

        TestGUI gui = new TestGUI();
        gui.setVisible(true);
        gui.pack();
    }
}

パネルが列に1つずつ表示されることを望みます。しかし今私はこれを手に入れました: ここに画像の説明を入力してください

bigPanelにコンポーネントを追加し、レイアウトをさらにカスタマイズする必要があるため、他のレイアウトの代わりにGridBagLayoutを使用する必要があります。

4

1 に答える 1

1

コンポーネントを追加して、残りの利用可能なスペースを埋め、2 つのボタンパネルを上部に押し込む必要があります。さらにコンポーネントを追加する場合は、もちろんそのコンポーネントを削除できます。

別のオプション (追加のコンポーネントを必要としない) は と を設定するweighty=1.0ことでしたが、コンポーネントを追加するときにそれを変更する必要があります。panel_banchor=NORTH

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestGUI extends JFrame {

    public TestGUI() {

        JPanel bigPanel = new JPanel(new GridBagLayout());
        JPanel panel_a = new JPanel();
        JButton btnA = new JButton("button a");
        panel_a.add(btnA);

        JPanel panel_b = new JPanel();
        JButton btnB = new JButton("button b");
        panel_b.add(btnB);

        GridBagConstraints c = new GridBagConstraints();
        c.gridwidth = GridBagConstraints.REMAINDER;
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 1.0;
        bigPanel.add(panel_a, c);
        bigPanel.add(panel_b, c);
        c.weighty = 1.0;
        // Temporary panel to fill the rest of the bigPanel
        bigPanel.add(new JPanel(), c);
        this.add(bigPanel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                TestGUI gui = new TestGUI();
                gui.pack();
                gui.setVisible(true);
            }
        });
    }
}
于 2012-11-08T09:39:48.960 に答える