Java GridBagLayout中的组件对齐

Java GridBagLayout中的组件对齐,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我正在使用GridBagLayout来对齐组件。实际上,我有两个按钮,我想像这样对齐: 所需布局: 但以下代码会产生以下布局: 结果布局: 我的代码: iconAdd = new ImageIcon(getClass().getResource("../images/add.png")); add = new JButton(iconAdd); add.setPreferredSize(new Dimension(130, 100)); add.setBord

我正在使用GridBagLayout来对齐组件。实际上,我有两个按钮,我想像这样对齐:

所需布局:

但以下代码会产生以下布局:

结果布局:

我的代码:

    iconAdd = new ImageIcon(getClass().getResource("../images/add.png"));
    add = new JButton(iconAdd);
    add.setPreferredSize(new Dimension(130, 100));
    add.setBorder(new LineBorder(Color.decode("#9b9999"), 1, true));
    add.setCursor(Cursor.getPredefinedCursor(12));
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.weightx = 1;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.insets = new Insets(5, 5, 5, 5);
    pane.add(add, gbc);

    iconSearch = new 
    ImageIcon(getClass().getResource("../images/search.png"));
    search = new JButton(iconSearch);
    search.setCursor(Cursor.getPredefinedCursor(12));
    search.setPreferredSize(new Dimension(130, 100));
    search.setBorder(new LineBorder(Color.decode("#9b9999"), 1, true));
    gbc.gridx++;
    gbc.anchor = GridBagConstraints.WEST;
    gbc.insets = new Insets(5, 5, 5, 5);
    pane.add(search, gbc);
任何帮助都将不胜感激

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

public class GridBagLayoutDemo extends JFrame{

    GridBagLayoutDemo(){

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GridBagLayout gridBagLayout = new GridBagLayout();
        gridBagLayout.columnWeights = new double[]{1.0, 1.0, 1.0};
        gridBagLayout.columnWidths = new int[]{0,0,300};
        getContentPane().setLayout(gridBagLayout);

        JButton button1 = new JButton("Long Button");
        GridBagConstraints c1 = new GridBagConstraints();
        c1.fill = GridBagConstraints.HORIZONTAL;
        c1.weightx = 0.0;
        c1.gridwidth = 3;
        c1.gridx = 0;
        c1.gridy = 0;
        getContentPane().add(button1, c1);

        JButton button2 = new JButton("Button 2");
        GridBagConstraints c2 = new GridBagConstraints();
        c2.weightx = 0.5;
        c2.gridx = 0;
        c2.gridy = 1;
        getContentPane().add(button2, c2);

        JButton button3 = new JButton("Button 3");
        GridBagConstraints c3 = new GridBagConstraints();
        c3.weightx = 0.5;
        c3.gridx = 1;
        c3.gridy = 1;
        getContentPane().add(button3, c3);

        pack();
        setVisible(true);
    }


    public static void main(String[] args) {

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new GridBagLayoutDemo();
            }
        });
    }
}

您告诉布局为每个组件提供额外的空间。因此,基本上每个组件都是框架大小的一半

您确实只希望为第二个按钮设置该约束,因此它会占用所有剩余空间

阅读Swing教程中有关如何使用GridBagLayout的部分,该部分解释了如何使用权重X/y约束

另外,一个更简单的解决方案是只使用
FlowLayout
。创建具有
流程布局的面板
。将按钮添加到面板。然后将面板添加到框架的
边框布局。页面开始

您告诉布局为每个组件提供额外的空间。因此,基本上每个组件都是框架大小的一半

您确实只希望为第二个按钮设置该约束,因此它会占用所有剩余空间

阅读Swing教程中有关如何使用GridBagLayout的部分,该部分解释了如何使用权重X/y约束


另外,一个更简单的解决方案是只使用
FlowLayout
。创建具有
流程布局的面板
。将按钮添加到面板。然后将面板添加到框架的
边框布局中。页面\u START

它无法解决您的问题,因为您没有发布,因此只能猜测此发布的代码是如何使用的。这演示了一个工作布局,类似于您所需要的。您需要通过将代码与工作演示进行比较来找出代码的错误,或者根据需要采用工作演示。为什么使用weightx=0.5?您可以删除这一行。它不会更改所需的布局。请注意列约束,并且每个按钮都是使用
GridBagConstraints
的新实例添加的,它无法解决您的问题,因为您没有发布,因此只能猜测此发布的代码是如何使用的。这演示了一个工作布局,类似于您所需要的。您需要通过将代码与工作演示进行比较来找出代码的错误,或者根据需要采用工作演示。为什么使用weightx=0.5?您可以删除这一行。它不会更改所需的布局。请注意列约束,以及每个按钮都是使用
GridBagConstraints
的新实例添加的,在提问时发布一个正确的选项。在提问时发布一个正确的选项。
gbc.weightx = 1;