我有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
确实包含文字,但我将其设置在其他地方。
答案 0 :(得分:4)
但每个容器的代码完全相同。
根据添加到容器的组件,为每个容器独立完成布局。所以容器上每个组件的大小都很重要。每个容器都不知道您有4个其他容器。
我有5个JP垂直排列。
那么你需要使用GridBagLayout创建一个面板,并将所有15个组件添加到该面板。然后根据5行中每一行的组件调整所有3列的大小。
或者我在您的逻辑中看到您尝试将相对大小分配给3个组件中的每个组件为.2,0,.8。在这种情况下,您可以在每个面板上使用Relative Layout。使用Relative Layout
,您将按首选大小显示按钮,然后分别使用0.2f和0.8f作为面板和标签的约束。