gpt4 book ai didi

java - gridbaglayout 的组件能否在调整大小时填充父框架?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:38:30 24 4
gpt4 key购买 nike

我有一个 JFrame,它的根 JPanel 是用 GridBagLayout 实例化的。在运行时,面板根据一些描述填充组件,宽度、高度和 x、y 坐标在描述中给出,以与 gridwidthgridheightgridxgridy 字段在 GridBagConstraints 中。组件本身也可以是具有自己的子组件和 GridBagConstraintsJPanel,GUI 在树中描述,因此递归填充 Frame。

我遇到的问题是,当调整框架大小时,内部组件不会拉伸(stretch)以填充其给定的宽度和高度。我在下面给出了一个布局代码示例,并附有屏幕截图。

import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.util.*;

public class GridBagTest extends JPanel {

private final GridBagConstraints gbc = new GridBagConstraints();

public GridBagTest(){

setLayout(new GridBagLayout());
add(gbcComponent(0,0,1,2), gbc);
add(gbcComponent(1,0,2,1), gbc);
add(gbcComponent(1,1,1,1), gbc);
add(gbcComponent(2,1,1,1), gbc);

}

//Returns a JPanel with some component inside it, and sets the GBC fields
private JPanel gbcComponent(int x, int y, int w, int h){

gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;
gbc.fill = GridBagConstraints.BOTH;
JPanel panel = new JPanel();
JTextField text = new JTextField("(" + w + ", " + h + ")");
panel.setBorder(new TitledBorder("(" + x + ", " + y + ")"));
panel.add(text);
return panel;

}

public static void main (String args[]){

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(new GridBagTest());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}

When running it After stretching

我需要它,所以在图 2 中,包含组件的内部 JPanel 调整大小以填充它们在 GridBagLayout 上各自的宽度和高度,理想情况下将它们的组件拉伸(stretch)为出色地。

最佳答案

这通常是因为您没有设置 weightx 和 weighty 约束。

尝试:

gbc.gridx = x; 
gbc.gridy = y;
gbc.gridwidth = w;
gbc.gridheight = h;

// **** add here:
gbc.weightx = 1.0;
gbc.weighty = 1.0;

如果需要,这将允许您的 GUI 在 x 和 y 方向上扩展。

关于java - gridbaglayout 的组件能否在调整大小时填充父框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723998/

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