gpt4 book ai didi

Java 组件在 GridBagLayout 上的定位

转载 作者:行者123 更新时间:2023-11-29 07:27:31 24 4
gpt4 key购买 nike

我正在尝试使用 GridBagLayout 在 JPanel 上定位组件,但我得到的输出与我的预期完全不同。希望在 stackoverflow 中得到一些头脑聪明的人的澄清:)。

下面我提供了一段代码和程序截图。我的问题是:

  1. 为什么 JLabel Choose measure system to convert 不在 Y 轴 = 1 上?据我所知,c.gridy=1 向下一个像素,但标签卡在顶部,框架标题没有留下任何空间。而且,为什么它的位置如此奇怪,即不在中心,也不在开始?

  2. 为什么ComboBoxFrom...To...之间有这么大的空间,但是有ComboBox To...TextField 之间没有空格 Enter value here...?

代码如下:

    JPanel container = new JPanel();
container.setLayout(new GridBagLayout());
getContentPane().add(container, BorderLayout.NORTH);
TitledBorder outputCenter;
GridBagConstraints c = new GridBagConstraints();

label = new JLabel("Choose measure system to convert");
label.setFont(new Font("Times New Roman", Font.PLAIN, 20));
c.gridx = 0;
c.gridy = 1;
container.add(label, c);

fromList = new JComboBox<String>(convertFrom);
c.gridx = 0;
c.gridy = 2;
container.add(fromList, c);

toList = new JComboBox<String>(convertTo);
c.gridx = 1;
c.gridy = 2;
container.add(toList, c);

//Field where user enters the value to be converted
input = new JTextField("Enter value here...");
input.setPreferredSize(new Dimension(150,30));;
input.setEditable(true);
input.setBackground(Color.WHITE);
input.setBorder(BorderFactory.createLineBorder(Color.BLACK));
input.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
input.setText("");}});
c.gridx = 2;
c.gridy = 2;
container.add(input, c);

这是截图:

GridBagLayout

编辑:如果我更改代码:

    label = new JLabel("Choose measure system to convert");
label.setFont(new Font("Times New Roman", Font.PLAIN, 20));
c.gridx = 0;
c.gridy = 1;
container.add(label, c);

label = new JLabel("Choose measure system to convert");
label.setFont(new Font("Times New Roman", Font.PLAIN, 20));
c.gridx = 1; // changed this line
c.gridy = 1;
container.add(label, c);

结果是这样的: enter image description here

这让我很困惑,为什么改变一个组件的位置会影响一切?

最佳答案

GridBagConstraints 将框架设置为有效的网格。默认情况下,网格中单元格的宽度和高度由单元格中数据的大小决定,除非另有说明。因此,如果您想在单元格之间添加一些空间,我建议使用 ipadxipady。您还可以利用 anchor 调整单元格中的数据。我还建议使用 weightxweighty 来调整实际的单元格大小。

想象一下您当前的设置是这样的:

enter image description here

编辑:您的新 GBC 外观示例。数字是(gridx,gridy)

enter image description here

关于Java 组件在 GridBagLayout 上的定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48873882/

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