如何将JPanel添加到JFrame?

3

我正在创建一个扫雷游戏。我需要在网格下方分别添加两个按钮,“清除”和“完成”,但不知道该如何实现。以下是游戏网格的代码。谢谢!

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MineField extends JPanel implements ActionListener{

    public static void main(String[] args) {
        MineField g = new MineField();
        JFrame frame = new JFrame("Mine Field");
        frame.add(g);
        frame.setSize(400,400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    private JButton squares[][];

    public MineField(){
        this.setSize(400,400);
        this.setLayout(new GridLayout(5,5));
        squares = new JButton[5][5];
        buildButtons();
    }

    int [][] num = new int [5][5];

    private void buildButtons(){
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                squares[i][j] = new JButton();
                squares[i][j].setSize(400,400);
                this.add(squares[i][j]);
            }
        }
    }

    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
    }

}

1
JFrame.add(Component c) - Justin
1
使用具有GUI设计器的集成开发环境(IDE)。 - b4da
2
@brifbraff,最好学习和理解布局管理器的工作原理,并以此设计自己的GUI。 - camickr
3个回答

7

默认情况下,JFrame 使用 BorderLayout 布局。

因此,您的 MineField 类当前添加到边框布局的 CENTER 区域。

如果您想在窗口上添加另一个面板,可以使用:

JPanel south = new JPanel();
south.add(clearButton);
south.add(doneButton);
frame.add(south, BorderLayout.SOUTH);

阅读Swing教程中有关如何使用边界布局(BorderLayout)的部分,以获取更多信息和示例,以更好地理解布局管理器的工作原理。


0

我们可以使用.add()方法将组件添加到彼此。

这两个实用的用途是:

mainPanel.add(topPanel); //panel to panel

就像Quincunx所说的那样

JFrame.add(Component c); //component to jframe

0
你应该稍微修改一下代码,可以添加这几行:
JPanel thePanel = (JPanel)frame.getContentPane(); // this variable will manage the JFrame content

thePanel.setLayout(new BorderLayout()); // BorderLayout to seperat the Frame on 5 section Center, North, South, Est, West

JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.Right)); // this JPanel made to contain the buttons
btnPanel.add(clearBtn);
btnPanel.add(doneBtn);

thePanel.add(g, BorderLayout.CENTER);
thePanel.add(btnPanel, BorderLayout.SOUTH);

希望这有所帮助,Salam


每当我尝试这样做时,它会说我需要将按钮组件化。我这样做了,但仍然没有改变任何东西。我该怎么办?感谢所有的帮助! - user2980816
-1,@user2980816,此答案早已给出。不需要在论坛上发布重复的答案。另外,框架的默认布局是BorderLayout,因此无需获取内容窗格并创建新的BorderLayout。 - camickr
谢谢您的批评,我会尽力做得更好,因为我是新手,不知道我们不能在这里回答好的答案! - BilalDja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接