gpt4 book ai didi

java - 替换 GridBagLayout 中的组件

转载 作者:行者123 更新时间:2023-12-02 04:59:55 25 4
gpt4 key购买 nike

我创建了一个从 JPanel 扩展的类,其布局属性是 GridBagLayout。我基本上需要显示一组 JLabels(网格),但我无法在创建组件后替换它。我尝试删除要更改的组件,然后放置新组件,但结果很奇怪。例如,我创建了一个 10x10 JLabels 数组,并希望用以下代码替换position[0][0]和position[9][9]:

//At first i have the jpanel layout completely filled

this.remove(0);
this.add((JLabel) start, 0); //This was created with GridBagLayout.gridx = 0 and GridBagLayout.gridy = 0 and it's fine

this.remove(99);
this.add((JLabel) end, 99); //This was created with GridBagLayout.gridx = 9 and GridBagLayout.gridy = 9 and it's out of grid
this.revalidate();

但只有位置[0][0]看起来不错。我应该如何更换组件?

enter image description here

最佳答案

GridBagLayout中,每个组件都与GridBagConstraints相关联。简单地删除组件并用同一位置的组件替换它是行不通的,因为新组件将收到新的 GridBagConstraints

但是,您可以做的是获取与给定组件关联的约束。

Component toRemove = getComponent(0);
GridBagLayout layout = (GridBagLayout)getLayout();
GridBagConstraints gbc = layout.getConstraints();
remove(toRemove);
add(new JLabel("Happy"), gbc, 0);

这将使用与您要删除的组件相同的约束来添加组件。

当然,这一切都假设您正在分配 gridx/gridy 约束...

关于java - 替换 GridBagLayout 中的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15262682/

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