Java 在JFrame中设置JPanel?
所以,我一直在努力重做我的代码,这样画图都是在JPanel中完成的,而不是在JFrame中完成的,所以我可以做一些非常需要的图像缓冲 我搜遍了StackOverflow,用谷歌搜索了我的手指,我想我把它设置好了,但它不起作用。我只是在终端上看到一个空白的白屏和一些错误脚本。感谢您的帮助。这是密码Java 在JFrame中设置JPanel?,java,jframe,jpanel,paintcomponent,Java,Jframe,Jpanel,Paintcomponent,所以,我一直在努力重做我的代码,这样画图都是在JPanel中完成的,而不是在JFrame中完成的,所以我可以做一些非常需要的图像缓冲 我搜遍了StackOverflow,用谷歌搜索了我的手指,我想我把它设置好了,但它不起作用。我只是在终端上看到一个空白的白屏和一些错误脚本。感谢您的帮助。这是密码 import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; import
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.geom.*;
public class RacerDoom extends JFrame {
private JPanel panel;
final int WIDTH = 900, HEIGHT = 640;
int counter = 0;
Rectangle left = new Rectangle(0,0,WIDTH/9,HEIGHT);
Rectangle right = new Rectangle((WIDTH/9)*8,0,WIDTH/9,HEIGHT);
Rectangle top = new Rectangle(0,0,WIDTH,HEIGHT/9);
Rectangle bottom = new Rectangle(0,(HEIGHT/9)*8,WIDTH,HEIGHT);
Rectangle center = new Rectangle((int)((WIDTH/9)*2.5),(int)((HEIGHT/9)*2.5),(int)((WIDTH/9)*4),(HEIGHT/9)*4);
Rectangle p1 = new Rectangle(WIDTH/9,HEIGHT/2,WIDTH/30,WIDTH/30);
Rectangle finishtop = new Rectangle(WIDTH/9,(HEIGHT/2)-HEIGHT/9,(int)((WIDTH/9)*1.5),HEIGHT/70);
//Starting lines
Rectangle startO = new Rectangle(WIDTH/9,HEIGHT/2,(int)((WIDTH/9)*1.5)/2,HEIGHT/140);
public RacerDoom() {
//create JFrame
super("Racer Doom Squared");
setSize(WIDTH,HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
getContentPane().add(panel);
panel = new MainPanel();
panel.setBounds(0,0,WIDTH,HEIGHT);
this.getContentPane().add(panel);
//set up Game countdown timer
final Timer timer=new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(counter>=10) {
((Timer)e.getSource()).stop();
}
else{
counter++;
}
System.out.println(counter);
}
});
//start timer
timer.start();
}
private class MainPanel extends JPanel {
public MainPanel() {
super();
}
//draw graphics
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0,0,WIDTH,HEIGHT);
//boundaries
g.setColor(Color.LIGHT_GRAY);
g.fillRect(left.x,left.y,left.width,left.height);
g.fillRect(right.x,right.y,right.width,right.height);
g.fillRect(top.x,top.y,top.width,top.height);
g.fillRect(bottom.x,bottom.y,bottom.width,bottom.height);
g.fillRect(center.x,center.y,center.width,center.height);
//start line
g.setColor(Color.WHITE);
g.fillRect(startO.x,startO.y,startO.width,startO.height);
//finish line
g.setColor(Color.CYAN);
g.fillRect(finishtop.x,finishtop.y,finishtop.width,finishtop.height);
//p1
g.setColor(Color.BLUE);
g.fill3DRect(p1.x,p1.y,p1.width,p1.height,true);
//HUD
g.setColor(Color.WHITE);
Font f = new Font("Monospaced", Font.BOLD, 24);
g.setFont(f);
g.drawString("Boosts: "+p1Boost,(WIDTH-(WIDTH/6)),(HEIGHT-(int)(HEIGHT/1.1)));
g.drawString("Time: "+(10-counter),540,100);
}
}
public static void main (String [] args) {
new RacerDoom();
}
}
错误脚本:
线程“main”java.lang.NullPointerException中出现异常
位于java.awt.Container.addImpl(未知源)
位于java.awt.Container.add(未知源)
在RacerDoom(RacerDoom.java:46)
位于RacerDoom.main(RacerDoom.java:232)
我很确定我只是个白痴,答案可能是在错误信息中给了我中指,但对我来说还是希腊语。但即使是(特别是?)白痴也需要帮助。你的错误很简单:
getContentPane().add(panel);
panel = new MainPanel();
panel.setBounds(0,0,WIDTH,HEIGHT);
在实际创建面板之前,将面板添加到窗口。试着像这样重新安排它:
panel = new MainPanel();
panel.setBounds(0,0,WIDTH,HEIGHT);
getContentPane().add(panel);
我相信第46行是:
getContentPane().add(panel);
此时,您还没有创建面板,因此它为空。你。删除该行;稍后的
this.getContentPane().add(面板)代码>是您所需要的全部。发生NullPointerException是因为您尝试添加未初始化的变量面板:
getContentPane().add(panel);
您必须首先初始化此变量,然后将其添加到getContentPane()它不是“某个错误脚本”,而是NullPointerException。看这一行,试着找出其中一个变量为null的原因。这不是火箭科学,而是要弄脏你的手指。检查该行中使用的所有变量(哪一行?),首先查看哪一行为空。我很抱歉。我应该在发布之前在网上搜索这个错误的含义。这就是我正在做的。当你每周工作60多个小时时,传统上很难“学习”。我通过阅读书籍和从在线社区寻求解决问题的帮助来学习。这和学生向老师寻求帮助没什么不同,我只是没有教室的好处。但在这里争论是不合适的。谢谢你的帮助。我能请你帮我写下我贴在下面的代码吗?这是如此简单的代码,但我不理解我得到的异常。当我用谷歌搜索它时,它只显示错误,而不是无可辩驳的无价值。我举了一个例子,但它不起作用。所以我不明白这个问题。