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