0

関連する投稿を単純な問題に転送できません。GridBagLayout に入るために、簡単な例を書きました。

       JFrame frame = new JFrame();
   JPanel main =new JPanel(); 
   frame.setContentPane(main);
   GridBagLayout gbl=new GridBagLayout();
   GridBagConstraints gbc = new GridBagConstraints();
   main.setLayout(gbl);
   JButton btn1 = new JButton("1");
   JButton btn2 = new JButton("2");

   gbc.gridx=0;
   gbc.gridy=0;
   gbc.gridheight=1;
   gbc.gridwidth=1;
   gbc.fill=GridBagConstraints.WEST;
   gbl.setConstraints(btn1, gbc);
   gbc.gridx=0;
   gbc.gridy=1;
   gbl.setConstraints(btn2, gbc);

   frame.setSize(new Dimension(200,100));

  main.add(btn1);
   main.add(btn2);
   frame.setVisible(true);

ここで、.fill も GBConstrains の他のパラメーターも機能しないという問題があります。ウィンドウの中央に 2 つのボタンが表示されることがあります。

thx事前に

4

2 に答える 2

2

の構成GridBagConstraintが正しくありません:

  • fillNONEVERTICALHORIZONTALまたはのみを使用できBOTHます。
  • anchor「セル」内の相対位置を使用できます
  • fillanchorほとんどの場合、使用する必要がありますweightx/weighty
  • gridxand の使用は避けてくださいgridy。メンテナンスが難しくなるためです。代わりにデフォルト値 ( ) を使用し、 /RELATIVEの値を変更して(または必要に応じてそれ以上)に設定し、レイアウトを次の行/列に折り返すことができます (コンポーネントは、コンテナーに追加された順序で配置されます)。 .gridwidthgridheight1REMAINDER

これがあなたの作業コードです(ただし、あなたがターゲットとしていた正確なレイアウトはわかりません):

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 TestGBL {

    protected void initUI() {
        JFrame frame = new JFrame();
        GridBagLayout gbl = new GridBagLayout();
        JPanel main = new JPanel(gbl);
        frame.setContentPane(main);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor = GridBagConstraints.WEST;
        gbc.weightx = 1.0;
        main.setLayout(gbl);
        JButton btn1 = new JButton("1");
        JButton btn2 = new JButton("2");

        gbl.setConstraints(btn1, gbc);
        gbl.setConstraints(btn2, gbc);

        main.add(btn1);
        main.add(btn2);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new TestGBL().initUI();
            }
        });
    }

}
于 2013-05-13T16:31:15.613 に答える
1

編集: 制約を再利用している GridBadLayout の使用方法を示すサンプル アプリケーションを作成しました。

    import java.awt.EventQueue;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.Insets;
    import javax.swing.JButton;
    import javax.swing.JFrame;



    public class Test1 {

        private JFrame frame;

        /**
         * Launch the application.
         */
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    try {
                        Test1 window = new Test1();
                        window.frame.setVisible(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }

        /**
         * Create the application.
         */
        public Test1() {
            initialize();
        }

        /**
         * Initialize the contents of the frame.
         */
        private void initialize() {
            frame = new JFrame();
            frame.setBounds(100, 100, 450, 300);

            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            GridBagLayout gridBagLayout = new GridBagLayout();
            gridBagLayout.columnWidths = new int[]{0, 0, 0};
            gridBagLayout.rowHeights = new int[]{0, 0};
            gridBagLayout.columnWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
            gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
            frame.getContentPane().setLayout(gridBagLayout);

            JButton btnTest = new JButton("Test1");
            GridBagConstraints gbc_btnTest = new GridBagConstraints();
            gbc_btnTest.insets = new Insets(0, 0, 0, 5);
            gbc_btnTest.gridx = 0;
            gbc_btnTest.gridy = 0;
            frame.getContentPane().add(btnTest, gbc_btnTest);

            JButton btnTest_1 = new JButton("Test2");
            gbc_btnTest.gridx = 1;
            gbc_btnTest.gridy = 0;
            frame.getContentPane().add(btnTest_1, gbc_btnTest);
        }

    }
于 2013-05-13T16:11:13.043 に答える