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

标签 java swing

我有一个包含两个组件的 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/

相关文章:

java - JButton在 Action 中执行

java - 使用按键绑定(bind)移动图像

java - 有没有办法让一个类中的 JTextArea 响应另一个类中的 JButton 单击?

java - 通过定时器设置 JDialog 不透明度

java - 有没有办法使用 PostProcessInterceptor 仅过滤特定类型的 ServerResponse?

java - 线程 "main"java.util.UnknownFormatConversionException : Conversion = ' ' 中的异常

java - 使用 java 将索引列添加到 apache Spark Dataset<Row>

Java 遍历集合

java - NetBeans gui 设计工具 (matisse) 似乎使用 Java 5 而不是 Java 6

Java Hello World 桌面应用程序