gpt4 book ai didi

java - GridBagLayout 中的组件放在中心,不占用所有可用空间

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

我有一个包含两个组件的 GridBagLayout:JRadioButton 和 JLabel。标签中的文本因长度而异。此 GridbagLayout 添加到 JPanel。所以当我有很多组件时,它们最后并没有很好地对齐。这就是我的意思:

-----radio btn-label-----
---radio btn-label --
-------radio btn-lbl-----

但我需要以下内容:

-radio btn-label        -
-radio btn-label -
-radio btn-lbl -

这是我的网格现在的样子:

public class MyPanel extends JPanel {
private JLabel info;
private JRadioButton select;

public MyPanel() {
this.achiev = achiev;
achievementInfo = new JLabel();
selectAchiev = new JRadioButton();

setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();

constraints.gridx = 0;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.LINE_START;
add(selectAchiev, constraints);

StringBuilder builder = new StringBuilder();
builder.append("<html><b>").append("some text").append("</b><p>");
builder.append("<i>").append("some more text").append("</i>");
info.setText(builder.toString());
constraints.gridx = 1;
constraints.gridy = 0;
constraints.fill = GridBagConstraints.HORIZONTAL;
add(info, constraints);
}

//--------------

JPanel panel = new JPanel(new BoxLayout(), BoxLayout.YAXIS);
for(int i = 0; i < 10; ++i) {
panel.add(new MyPanel());
}

最佳答案

您要添加 10 个面板,它们都有自己的网格包布局、复选框和标签。因此每个面板都有自己的网格,单元格的宽度根据它们包含的组件独立计算。

如果你想要一个对齐良好的单一网格,你应该有一个使用 GridBagLayout 的面板,并将你的 10 个标签和 10 个复选框添加到这个独特的面板。

此外,如果您确实希望它水平填充,则应为标签的约束赋予 weightx > 0。

关于java - GridBagLayout 中的组件放在中心,不占用所有可用空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18289456/

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