如何将按钮设置到 JPanel 的特定区域?

问题描述 投票:0回答:1

我已将按钮添加到 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);
    
    
}
java layout gridbaglayout
1个回答
0
投票

GridBagLayout
功能强大但很复杂。实用时,使用更简单的布局管理器。

BorderLayout
是一个非常有用的布局管理器。请参阅 Oracle 的教程。中心部分的内容像气球一样填充,占据了周围部分内容不需要的所有空间。

将按钮放在顶部。将您的问题标签放在中间部分。简单易行。

请记住,您可以在布局中嵌套布局。您可能需要将按钮包装在布局中,然后将该布局放置在

BorderLayout
的顶部。

© www.soinside.com 2019 - 2024. All rights reserved.