有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将JPanel添加到JFrame?

我正在制作一个雷区游戏。我需要在网格下添加两个按钮,分别在各自的JPanel中清除和完成,但无法确定如何执行。下面是游戏网格的代码。谢谢

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
    }

}

共 (3) 个答案

  1. # 1 楼答案

    我们可以使用.add()方法相互添加组件

    这有两个实际用途:

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

    或者像梅花形说的那样

    JFrame.add(Component c); //component to jframe
    
  2. # 2 楼答案

    默认情况下,JFrame使用BorderLayout

    因此,当前您的雷场类被添加到边界布局的中心

    如果要在框架上安装另一个面板,可以使用:

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

    阅读Swing教程中关于How to Use BorderLayout的部分,了解更多信息和示例,以更好地了解布局管理器的工作方式

  3. # 3 楼答案

    您应该稍微修改一下代码,您可以添加以下几行:

    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);
    

    希望有帮助,萨拉姆