Java 无法创建新的JPanel
我正在用Java制作Pong,我已经实现了主游戏,但我还想在开始时弹出一个菜单屏幕。我创建了菜单屏幕,但当我按下“开始游戏”按钮时,我不知道如何开始游戏。我有一个包含我的主方法的类:Java 无法创建新的JPanel,java,swing,jframe,jpanel,Java,Swing,Jframe,Jpanel,我正在用Java制作Pong,我已经实现了主游戏,但我还想在开始时弹出一个菜单屏幕。我创建了菜单屏幕,但当我按下“开始游戏”按钮时,我不知道如何开始游戏。我有一个包含我的主方法的类: 公共类主{ 公共静态void main(字符串[]args) { PongRunner runner=新的PongRunner(); runner.menuScreen(); //System.out.println(“+display.getHeight()+”+display.getWidth()); } }
公共类主{
公共静态void main(字符串[]args)
{
PongRunner runner=新的PongRunner();
runner.menuScreen();
//System.out.println(“+display.getHeight()+”+display.getWidth());
}
}
我还有一门课程可以运行菜单和主游戏:
import javax.swing.JFrame;
公共类PongRunner扩展JFrame{
JFrame=新JFrame(“MLG Pong”);
公共PongRunner()
{
}
public void菜单筛选()
{
菜单=新菜单();
frame.add(菜单);
框架设置尺寸(1280720);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setresizeable(false);
}
公共无效StartName()
{
frame.removeAll();
游戏=新游戏();
frame.add(游戏);
}
}
我正在尝试这样做,当我按下按钮开始游戏时,我将调用startName()方法并清除或“删除”JFrame中的菜单JPanel,并将其替换为我游戏类中的JPanel。以下是菜单类中的actionListener:
public void actionPerformed(ActionEvent e)
{
如果(例如getActionCommand().equals(“startName”)){
重画=假;
//系统输出打印(“测试”);
PongRunner runner=新的PongRunner();
runner.startGame();
}
}
有什么办法吗?不要在动作监听器中创建新的
PongRunner
。使用最初创建的实例
另外,不要将add
用于JFrame
使用方法setContentPane
设置框架的主要内容。因此,您需要PongRunner
和Menu
成为Container
的子类,每个swing组件都是这样的)
所以代码应该是这样的:
public class main {
public static void main(String[]args) {
PongRunner runner = new PongRunner();
runner.menuScreen();
}
}
public class game extends ... { // should extends at least Container
}
public class Menu extends JPanel implements ActionListener {
private PongRunner theRunner;
public Menu(PongRunner p) {
theRunner = p;
JButton b = new JButton("Start");
b.setActionCommand("startgame");
this.add(b);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("startgame")) {
theRunner.startGame();
}
}
}
public class PongRunner extends JFrame {
JFrame frame = new JFrame("MLG Pong");
public void menuScreen() {
Menu menu = new Menu(this);
frame.setContentPane(menu);
frame.setSize(1280,720); // don't use such a thing, set the preferred size of the contentPane to a desired value
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
}
public void startGame() {
frame.setContentPane(new game());
frame.pack();
}
}
查看CardLayout-它可以让您一次显示一个JPanel并在它们之间切换。以下是教程:。在menuScreen方法中创建新菜单时,是否应该有一个
(this)
作为参数,因为菜单构造函数将PongRunner作为参数?