简体   繁体   中英

Debugging GridBagLayout - components clumped to center

I'm trying to get the following layout

Label..................NumericField
Label2................NumericField
Label3333..........NumericField

Basically the (.) dots would be empty space. I had tried GridBagLayout with making the label's gridwidth as 5 and the NumericField's gridwidth as 1. I'm posting the code below. But I don't see the desired result and I see all components aligned at the center instead of Labels being at left border and NFs being at right border.

For Labels:

    GridBagConstraints localC = new GridBagConstraints();
    localC.anchor  = GridBagConstraints.FIRST_LINE_START;
    //localC.fill = GridBagConstraints.HORIZONTAL;
    localC.weightx = 1.0;
    localC.weighty = 1.0;
    localC.gridx    = 0;
    localC.gridy    = 0;
    localC.gridheight = 1;
    localC.gridwidth  = 5;
    localC.insets = new Insets(0, 0, 0, 0);

For NumericFields

    localC.anchor = GridBagConstraints.RELATIVE;
    localC.weightx = 0.5;
    localC.weighty = 0.5;
    localC.gridx = 1;
    localC.gridy = 0;
    localC.gridheight = 1;
    localC.gridwidth  = 1;

I'm new to JAVA and struggling with layouts generally.

Add a value to the Insets right property, which will add that number of pixels to the right side of the column. You could also use GridBagConstraints#anchor set to GridBagConstraints.WEST , which will force the components in the columns to be positioned on the left hand side of the "column", this ensures that when a component in the column is wider, they won't be laid out in the middle of the resulting space.

gridwidth determines how a given cell will span across multiple columns, but if there are no other components in the resulting columns, they are discard (defaulted to 0 ), so in your layout, it's meaningless.

See How to Use GridBagLayout more details

GridBagLayout

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

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

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

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                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.gridx = 0;
            gbc.gridy = 0;
            gbc.anchor = GridBagConstraints.WEST;
            gbc.insets = new Insets(0, 0, 0, 12);

            add(new JLabel("Label"), gbc);
            gbc.gridy++;
            add(new JLabel("Label2"), gbc);
            gbc.gridy++;
            add(new JLabel("Label3333"), gbc);

            gbc.gridx = 1;
            gbc.gridy = 0;
            gbc.insets = new Insets(0, 0, 0, 0);

            add(new JTextField(10), gbc);
            gbc.gridy++;
            add(new JTextField(10), gbc);
            gbc.gridy++;
            add(new JTextField(10), gbc);
        }

    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM