GridBagLayout 没有排队
GridBagLayout not lining up
我有 5 个 JPanels
垂直排列。每个 JPanel
填充有相同的元素,但值不同(JPanel
、JButton
、JLabel
)。我希望它们看起来像这样:
Panel Button Label
Panel Button Label
结果变成了这样
Panel Button Label
Panel Button Label
间距有点偏差,但每个容器的代码完全相同。我该如何解决这个问题?
public class AnswerChoice extends JPanel {
private static final long serialVersionUID = 1L;
private AnswerButton button;
private JLabel answerLabel;
public AnswerChoice(String imageURL) {
setBackground(Color.RED);
setLayout(new GridBagLayout());
button = new AnswerButton(imageURL);
answerLabel = new JLabel();
answerLabel.setFont(new Font("Times New Roman", Font.PLAIN, 32));
GridBagConstraints gbc = new GridBagConstraints();
JPanel panel = new JPanel();
panel.setBackground(Color.ORANGE);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 1;
gbc.weightx = 0.2;
add(panel, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridx = 2;
gbc.weightx = 0.0;
gbc.insets = new Insets(0, 0, 0, 30);
add(button, gbc);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 3;
gbc.weightx = 0.8;
add(answerLabel, gbc);
}
}
JLabel
中确实有文字,但我将其设置在其他地方。
but the code is exactly the same for each container.
根据添加到容器中的组件,为每个容器独立完成布局。所以容器上每个组件的大小都很重要。每个容器都不知道您还有 4 个其他容器。
I have 5 JPanels lined up vertically.
因此您需要使用 GridBagLayout 创建一个面板并将所有 15 个组件添加到该面板。然后将根据 5 行中每一行中的组件调整所有 3 列的大小。
或者我在您的逻辑中看到您尝试将相对大小分配给 3 个组件中的每一个,如 .2、0、.8。在这种情况下,您可以在每个面板上使用 Relative Layout。使用 Relative Layout
您将以首选大小显示按钮,然后分别使用 0.2f 和 0.8f 作为面板和标签的约束。
我有 5 个 JPanels
垂直排列。每个 JPanel
填充有相同的元素,但值不同(JPanel
、JButton
、JLabel
)。我希望它们看起来像这样:
Panel Button Label
Panel Button Label
结果变成了这样
Panel Button Label
Panel Button Label
间距有点偏差,但每个容器的代码完全相同。我该如何解决这个问题?
public class AnswerChoice extends JPanel {
private static final long serialVersionUID = 1L;
private AnswerButton button;
private JLabel answerLabel;
public AnswerChoice(String imageURL) {
setBackground(Color.RED);
setLayout(new GridBagLayout());
button = new AnswerButton(imageURL);
answerLabel = new JLabel();
answerLabel.setFont(new Font("Times New Roman", Font.PLAIN, 32));
GridBagConstraints gbc = new GridBagConstraints();
JPanel panel = new JPanel();
panel.setBackground(Color.ORANGE);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 1;
gbc.weightx = 0.2;
add(panel, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridx = 2;
gbc.weightx = 0.0;
gbc.insets = new Insets(0, 0, 0, 30);
add(button, gbc);
gbc.fill = GridBagConstraints.BOTH;
gbc.gridx = 3;
gbc.weightx = 0.8;
add(answerLabel, gbc);
}
}
JLabel
中确实有文字,但我将其设置在其他地方。
but the code is exactly the same for each container.
根据添加到容器中的组件,为每个容器独立完成布局。所以容器上每个组件的大小都很重要。每个容器都不知道您还有 4 个其他容器。
I have 5 JPanels lined up vertically.
因此您需要使用 GridBagLayout 创建一个面板并将所有 15 个组件添加到该面板。然后将根据 5 行中每一行中的组件调整所有 3 列的大小。
或者我在您的逻辑中看到您尝试将相对大小分配给 3 个组件中的每一个,如 .2、0、.8。在这种情况下,您可以在每个面板上使用 Relative Layout。使用 Relative Layout
您将以首选大小显示按钮,然后分别使用 0.2f 和 0.8f 作为面板和标签的约束。