Java GridBagLayout中的组件对齐
我正在使用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
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;