1

私は学習 GridBagLayoutしていて、添付されている非常に単純なレイアウトを行いました。2つの非常に小さな混乱があります
1-Size of Buttons私が使用 New.setPreferredSize(new Dimension(70,23)); したのは、すべてのボタンを同じサイズにする標準的な方法です

2-コンポーネントの配置が見栄えが悪い

ここに画像の説明を入力してください

今ではもっとたくさんpadding on all sides of componentsあるので、それを正しい方法from top left corner で配置する方法、サイズを小さくするJFrame? か、両方の作業を使用する 必要がありますframe.pack();が、標準的な方法が何であるかわかりません(私は試しましたpagestartなど)、

これが私のコードの見た目です

    frame= new JFrame("Hello ");
    frame.setSize(300, 150);
    frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    frame.addWindowListener(this);  
    frame.setResizable(false);
    frame.setLocation(0, 0);
    p1= new JPanel (new GridBagLayout());

    gbc = new GridBagConstraints();

    lblname= new JLabel("Name");
    gbc.gridx=0; 
    gbc.gridy=0;  

    p1.add(lblname, gbc);

    textname = new JTextField(11);
    gbc.gridx=1; 
    gbc.gridy=0 ; 

    p1.add(textname, gbc);

    New=  new JButton("New"); 
    gbc.gridx=2; 
    gbc.gridy=0;
    New.setPreferredSize(new Dimension(70,23));
    p1.add(New, gbc);

    lblEmail = new JLabel("Email "); 
    gbc.gridx=0; 
    gbc.gridy=1;
    p1.add(lblEmail , gbc); 

    TextEmail = new JTextField(11);
    gbc.gridx=1; 
    gbc.gridy=1; 
    p1.add(TextEmail,gbc);

    Edit = new JButton("Edit") ;
    gbc.gridx= 2 ;
    gbc.gridy=1; 
    Edit.setPreferredSize(new Dimension(70,23));

    p1.add(Edit , gbc); 

    lblgender= new JLabel("Gender"); 
    gbc.gridx=0; 
    gbc.gridy=2; 
    p1.add(lblgender, gbc); 

    TextGender= new JTextField(11);
    gbc.gridx=1; 
    gbc.gridy=2; 
    p1.add(TextGender, gbc); 

    Gender= new JButton("Gender");
    gbc.gridx=2;
    gbc.gridy=2;
    Gender.setPreferredSize(new Dimension(70,23));

    p1.add(Gender, gbc);

    pre= new JButton("<<");
    gbc.gridx=0; 
    gbc.gridy=3; 
    p1.add(pre, gbc);

    count =  new JTextField(5);
    gbc.gridx=1; 
    gbc.gridy=3; 
    p1.add(count, gbc);

    next= new JButton(">>");
    gbc.gridx=2; 
    gbc.gridy=3; 
    next.setPreferredSize(new Dimension(70,23));

    p1.add(next, gbc);


    p1.setVisible(true);
    frame.add(p1);
    frame.setVisible(true);
4

1 に答える 1

4

GridBagLayoutこれは、JDK で利用できる最も柔軟なレイアウト マネージャーの 1 つでもあります。

複合レイアウトを使用することを恐れないでください。以下の例では、ナビゲーション コントロールを独自のパネルに移動したため、複雑なレイアウトを簡単に定義できます (この方法でレイアウト マネージャーを混在させることもできます)。

GridBagConstraints#fillセル内でコンポーネントがどのように満たされるかを決定できます。あなたが持っているGridBagConstraints.HORIZONTALGridBagConstraints.VERTICALそしてGridBagConstraints.BOTH...そこにある意味は自明だと思います。

以下の例ではGridBagConstraints.HORIZONTAL、ボタンがセル/列内の利用可能なすべてのスペースを埋めることを許可するために使用しました

ここに画像の説明を入力

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.LineBorder;

public class TestLayout20 {

    public static void main(String[] args) {
        new TestLayout20();
    }

    public TestLayout20() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());

            GridBagConstraints gbc = new GridBagConstraints();
            gbc.anchor = GridBagConstraints.WEST;
            JLabel lblname = new JLabel("Name");
            gbc.gridx = 0;
            gbc.gridy = 0;

            add(lblname, gbc);

            JTextField textname = new JTextField(11);
            gbc.gridx = 1;
            gbc.gridy = 0;

            add(textname, gbc);

            JLabel lblEmail = new JLabel("Email ");
            gbc.gridx = 0;
            gbc.gridy = 1;
            add(lblEmail, gbc);

            JTextField TextEmail = new JTextField(11);
            gbc.gridx = 1;
            gbc.gridy = 1;
            add(TextEmail, gbc);

            JLabel lblgender = new JLabel("Gender");
            gbc.gridx = 0;
            gbc.gridy = 2;
            add(lblgender, gbc);

            JTextField TextGender = new JTextField(11);
            gbc.gridx = 1;
            gbc.gridy = 2;
            add(TextGender, gbc);

            JButton New = new JButton("New");
            gbc.fill = GridBagConstraints.HORIZONTAL;
            gbc.insets = new Insets(0, 12, 0, 0);
            gbc.gridx = 2;
            gbc.gridy = 0;
            add(New, gbc);

            JButton edit = new JButton("Edit");
            gbc.gridx = 2;
            gbc.gridy = 1;

            add(edit, gbc);

            JButton Gender = new JButton("Gender");
            gbc.gridx = 2;
            gbc.gridy = 2;

            add(Gender, gbc);

            JPanel pnlNav = new JPanel(new GridBagLayout());
            gbc.insets = new Insets(12, 0, 0, 0);
            gbc.gridx = 0;
            gbc.gridy = 3;
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.fill = GridBagConstraints.HORIZONTAL;

            add(pnlNav, gbc);

            JTextField count = new JTextField(5);
            gbc = new GridBagConstraints();
            gbc.gridx = 1;
            gbc.gridy = 0;
            pnlNav.add(count, gbc);

            JButton pre = new JButton("<<");
            gbc.anchor = GridBagConstraints.WEST;
            gbc.weightx = 1;
            gbc.gridx = 0;
            gbc.gridy = 0;
            pnlNav.add(pre, gbc);

            JButton next = new JButton(">>");
            gbc.anchor = GridBagConstraints.EAST;
            gbc.gridx = 2;
            gbc.gridy = 0;
            pnlNav.add(next, gbc);

        }
    }
}

より良い説明のために、 GridBagLayoutの使用方法を一読することを強くお勧めします:P

于 2013-03-10T08:29:46.517 に答える