java - 为什么从其他类调用 JPanel 会给出 NullPointerException 错误?

标签 java swing jframe jpanel getter-setter

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

这是我的类(class):

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,但是这个似乎不起作用。

最佳答案

嗨,Elena,您的面板尚未实例化

私有(private)静态 JPanel 面板;

当你打电话时

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

关于java - 为什么从其他类调用 JPanel 会给出 NullPointerException 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62362110/

相关文章:

java - 为什么当我使用引用从另一个类调用一个类的 get 方法时它为 null,即它打印出 null

java - 从 JPanel 之外的类对象访问变量

java - 为什么我的字符串没有显示在窗口中?

java - 如何拥有透明模糊背景的 JFrame

java - AsyncTask 中的 ProgressDialog 关闭不起作用

JavaFX 外部目录和 jar 文件之外的资源

java - 截击请求太慢

java - 如何更改 JComboBox 的选定值

java - JButton 鼠标悬停在运动监听器上的小信息框(工具提示)

java - 如何在 Swing 中获取 JWindow 的父容器?