我已将按钮添加到 JPanel 中,我想让它们出现在面板的不同区域中。我想布局我的面板,以便顶部有 3 个按钮,问题标签横跨中心。
我尝试了多种不同的布局,但无法将按钮放在正确的位置。按钮始终按照添加的顺序出现在框架的中心。
public Frame(int w, int h) {
width = w;
height = h;
buttonY = new JButton("Yes");
buttonN = new JButton("No");
buttonIDK = new JButton("I don't know");
QL = new JLabel(question);
counter = new JLabel("Your question count is: " +count);
}
public void setUpFrame() {
JFrame f = new JFrame();
JPanel p = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
p.setLayout(new GridBagLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(width, height);
p.setSize(getPreferredSize());
f.setTitle("Food Akinator");
p.setBackground(Color.RED);
p.setBackground(Color.RED);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.gridy = 0;
c.anchor = GridBagConstraints.NORTHWEST;
p.add(buttonY, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 1;
c.gridy = 0;
c.anchor = GridBagConstraints.NORTH;
p.add(buttonIDK, c);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 2;
c.gridy = 0;
c.anchor = GridBagConstraints.NORTHEAST;
p.add(buttonN, c);
QL.setFont(new Font("Times New Roman", Font.PLAIN, 20));
QL.setText(question);
QL.setBorder(border);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridwidth = 3;
c.gridx = 0;
c.gridy = 1;
c.anchor = GridBagConstraints.CENTER;
p.add(QL, c);
f.add(p);
f.setVisible(true);
}
GridBagLayout
功能强大但很复杂。实用时,使用更简单的布局管理器。
BorderLayout
是一个非常有用的布局管理器。请参阅 Oracle 的教程。中心部分的内容像气球一样填充,占据了周围部分内容不需要的所有空间。
将按钮放在顶部。将您的问题标签放在中间部分。简单易行。
请记住,您可以在布局中嵌套布局。您可能需要将按钮包装在布局中,然后将该布局放置在
BorderLayout
的顶部。