所以现在,我是使用java awt图形的新手。我已经掌握了基础知识,比如如何将内容放到屏幕上,但我的主要问题是我正在尝试创建自定义方法以便在类文件之外使用。
对于我的屏幕类:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Screen extends JPanel{
Graphics g = null;
public void createBox(int x, int y, int width, int height){
g.fillRect(x, y, width, height);
}
}
对于我的Draw类,也使用屏幕类:
import javax.swing.*;
public class Draw{
public static void main(String[] args) {
JFrame f = new JFrame("Shapes");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Screen s = new Screen();
s.createBox(10,10,10,10);
f.add(s);
f.setSize(512, 512);
f.setVisible(true);
}
}
即使我有图形g;如果没有声明,我仍然会得到同样的错误:
Exception in thread "main" java.lang.NullPointerException
at Screen.createBox(Screen:java:7)
at Draw.main(Draw:java:8)
createBox()应该在Screen类之外使用,所以我仍然可以使用fillRect()但使用不同的名称(我希望这是有道理的)。
有谁可以指出我做错了什么?感谢。
答案 0 :(得分:2)
有谁可以指出我做错了什么?
请勿尝试保留对Graphics
对象的引用!而是覆盖paintComponent(Graphics)
方法并使用它(有效的,而不是null
)图形实例。要触发绘画,请致电repaint()
。
所有这些内容都在tutorial on custom painting中介绍。通过它!