gpt4 book ai didi

java - GridBagConstraints 未正确对齐 JRadioButton 框

转载 作者:行者123 更新时间:2023-11-30 06:51:50 24 4
gpt4 key购买 nike

即使指定了 .weightx、.weighty 和 .anchor,GridBagConstraints 也不起作用。我需要将组件设置在左上角,但它一直设置在屏幕中央。下面是我用于定位组件的方法。

private void initGUI(){
getContentPane().setLayout(new GridBagLayout());

JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(450, 450));

Box buttonBox = Box.createVerticalBox();
ButtonGroup buttons = new ButtonGroup();

buttons.add(okOnly);
buttons.add(okCancel);
buttons.add(yesNoCancel);
buttons.add(yesNo);

buttonBox.add(okOnly);
buttonBox.add(okCancel);
buttonBox.add(yesNoCancel);
buttonBox.add(yesNo);
buttonBox.setBorder(BorderFactory.createTitledBorder("Buttons"));

GridBagConstraints gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 0;
gridConstraints.anchor = GridBagConstraints.NORTHWEST;
gridConstraints.weightx = 1;
gridConstraints.weighty = 1;

panel.add(buttonBox, gridConstraints);
getContentPane().add(panel);
}

最佳答案

您将 GridBagLayout 赋予 contentPane,但向其添加一个不带 GridBagConstraints 的组件,然后向面板 JPanel 赋予 no 布局,以便它使用默认的 FlowLayout,并添加组件它使用 GridBagConstraints,在这种情况下没有意义的约束。

解决方案:显然不要这样做。仅在将组件添加到使用 GridBagLayout 的容器时使用 GridBagConstraints。

事实上,如果您只需要左上角的 JRadioButtons 集合,我会简单地去掉 JPanel 面板:

import java.awt.*;
import javax.swing.*;

public class Gui extends JFrame {
private JRadioButton okOnly = new JRadioButton("Ok ");
private JRadioButton okCancel = new JRadioButton("Ok Cancel");
private JRadioButton yesNoCancel = new JRadioButton("Yes No Cancel");
private JRadioButton yesNo = new JRadioButton("Yes No");

private void initGUI() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setLayout(new GridBagLayout());

// JPanel panel = new JPanel();
// panel.setPreferredSize(new Dimension(450, 450));

setPreferredSize(new Dimension(450, 450));

Box buttonBox = Box.createVerticalBox();
ButtonGroup buttons = new ButtonGroup();

buttons.add(okOnly);
buttons.add(okCancel);
buttons.add(yesNoCancel);
buttons.add(yesNo);

buttonBox.add(okOnly);
buttonBox.add(okCancel);
buttonBox.add(yesNoCancel);
buttonBox.add(yesNo);
buttonBox.setBorder(BorderFactory.createTitledBorder("Buttons"));

GridBagConstraints gridConstraints = new GridBagConstraints();
gridConstraints.gridx = 0;
gridConstraints.gridy = 0;
gridConstraints.anchor = GridBagConstraints.NORTHWEST;
gridConstraints.weightx = 1;
gridConstraints.weighty = 1;

// panel.add(buttonBox, gridConstraints);
add(buttonBox, gridConstraints);
// getContentPane().add(panel);

pack();
setLocationRelativeTo(null);
setVisible(true);
}

private static void createAndShowGui() {
new Gui().initGUI();
}

public static void main(String[] args) {
SwingUtilities.invokeLater(() -> createAndShowGui());
}
}

关于java - GridBagConstraints 未正确对齐 JRadioButton 框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39840703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com