为什么从其他类调用JPanel会导致NullPointerException错误?

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

我是Java GUI的新手,我正在尝试制作我的第一个视觉游戏。当我们运行程序时,会弹出一个包含两个按钮的窗口,如果您单击其中的一个,则游戏开始。 ,我创建了一个扩展JPanel的类,因此将创建我的第一个面板,并创建该类的对象并将其添加到JFrame中。但是我需要在单击按钮时更改面板,所以我创建了一个新面板。我的主游戏类中的JPanel对象JPanel。因为第二个JPanel是用不同的方式创建的,所以我将我的第一个JPanel做成了类似的JPanel,并将getter和setter放入了我的框架类。但是代码给了我NullPointerException错误。

这是我的课程:

public class Frame {
	
	//The constructor method for frame.
	
	private static JPanel panel;
	
	public Frame () {
		
		JFrame frame = new JFrame();
		
		frame.add(panel);    //Adding the panel of the game to the frame.
		frame.setTitle("Halma Game");       //The title of the window popped up when the program runs.
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.pack();
		frame.setVisible(true);
	}

	public static JPanel getPanel() {
		return panel;
	}

	public static void setPanel(JPanel panel) {
		Frame.panel = panel;
	}

}

public class MenuPanel extends JPanel implements ActionListener {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	
	private JButton playButton;
	private JButton recordButton;
    private JLabel label;
    private JPanel panel = new JPanel();

	public MenuPanel() {
		
		panel.setBorder(BorderFactory.createEmptyBorder(300,400,300,400));
		panel.setLayout(new GridLayout(0,1));
		panel.setBackground(Color.decode("255128255"));
		
	    playButton = new JButton("New Game");
	    playButton.setFocusable(false);
	    playButton.setBackground(Color.PINK);
	    playButton.setFont(new Font("Ariel",Font.ITALIC,25));
		playButton.addActionListener(this); //???     //Mohreha ro ye abstact beheshon bezani khoobe
		panel.add(playButton);
		
		recordButton = new JButton("HighScores");
		recordButton.setFocusable(false);
		recordButton.setBackground(Color.pink);
		playButton.setFont(new Font("Ariel",Font.ITALIC,25));
		panel.add(recordButton);
		label = new JLabel();
		
	}


	@Override
	public void actionPerformed(ActionEvent e) {
		GamePanel game = new GamePanel();
		game.start();
		
	}
	
		
		
		

}

我还没有在此代码上尝试第二个JPanel,但是这个似乎不起作用。

java jframe jpanel getter-setter
1个回答
0
投票

嗨,埃琳娜,您的面板尚未实例化

私有静态JPanel面板;

当您打电话时

frame.add(panel); //将游戏面板添加到框架中。

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