java 关闭jpanel_从JFrame [Java]关闭JPanel窗口

本文介绍如何在Java应用程序中使用JFrame切换JPanel。当点击“开始”按钮时,菜单面板应被替换为游戏面板,而无需关闭或打开新的窗口。通过在JFrame的内容 pane中添加和删除JPanel,可以实现这一目标。问题在于监听器的配置,需要正确处理以确保游戏面板能够接收键盘事件。
摘要由CSDN通过智能技术生成

所以,我想制作一个带有JPanel的菜单屏幕,我让它工作,但是当我按下“开始”按钮时,它没有关闭菜单窗口,它只是打开一个新窗口,我该怎么做,保持它在同一个窗口,没有关闭/打开菜单窗口,或者我想关闭菜单窗口并打开游戏窗口(JPanel),当我按下开始按钮 .

这是MainClass.java

package bombermangame;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class MainClass extends JFrame{

private static final long serialVersionUID = 1L;

public static int WIDTH = 870, HEIGHT = 800;

public static JPanel menu = new Menu();

public static Listener keys = new Listener();

public MainClass(){

setContentPane(menu);

pack();

setResizable(false);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setTitle("BomberMan V0.3");

setSize(WIDTH, HEIGHT);

setLocationRelativeTo(null);

setVisible(true);

}

public static void main(String[] args) {

new MainClass();

}

}

这是Menu.java类

package bombermangame;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Timer;

import java.util.TimerTask;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class Menu extends JPanel implements ActionListener {

private static final long serialVersionUID = 1L;

private JButton startButton = new JButton("Play");

private int x = 0, y = 500;

private boolean down = false;

private boolean up = true;

private Timer timer = new Timer();

public Menu() {

setBackground(Color.blue);

startButton = new JButton("Start");

startButton.setBounds(0,0, 100, 40);

startButton.setPreferredSize(new Dimension(100, 40));

startButton.addActionListener(this);

startButton.setFocusPainted(true);

this.add(startButton);

public void actionPerformed(ActionEvent ae) {

Object a = ae.getSource();

Game game = new Game();

MainClass frm = new MainClass();

Listener keys = new Listener();

if (a == startButton) {

timer.cancel();

frm.getContentPane().remove(new Menu());

frm.addKeyListener(keys);

frm.setContentPane(game);

frm.revalidate();

frm.repaint();

game.setBackground(Color.BLACK);

game.setDoubleBuffered(true);

game.setBounds(0, 0, WIDTH, HEIGHT);

Game.running = true;

}

}

}

编辑:感谢@whiskeyspider的帮助,我了解到我制作了2帧并没有正确引用它们 . 但是现在我已经解决了,我的监听器出现了问题,当我修复它时,我的Jpanel将无法使用我的监听器 . 我已经尝试将Listener直接添加到我的Game JPanel和我的MainClass JFrame中,但两者都不会起作用 .

这是我的一些菜单类,

public void actionPerformed(ActionEvent ae) {

Object a = ae.getSource();

JPanel game = new Game();

Listener keys = new Listener();

if (a == startButton) {

timer.cancel();

MainClass.frame.getContentPane().remove(this);

MainClass.frame.setContentPane(game);

MainClass.frame.addKeyListener(keys);

game.addKeyListener(keys);

game.setBackground(Color.BLACK);

game.setDoubleBuffered(true);

game.setBounds(0, 0, WIDTH, HEIGHT);

Game.running = true;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值