import javax.swing.*;
import java.awt.*;public class drawonpanel {
Graphics2D g2d;
public drawonpanel(JPanel p) {
g2d =(Graphics2D) p.getGraphics();
System.out.println("inside of drawonpanel");
g2d.drawString("i am a boy!",50,50);
}
}import javax.swing.*;
public class Main {
JPanel p;
JFrame f;
drawonpanel pp;
public Main() {
p = new JPanel();
f = new JFrame();
pp = new drawonpanel(p);
f.getContentPane().add(p);
f.pack();
f.show();
} public static void main(String args[]){
new Main();
}
}
两个类,drawonpanle负责画图,Main负责显示,我把一个JPanle传到drawonpanle里了,但是程序执行到:g2d.drawString("i am a boy!",50,50);
会有异常显示:
java.lang.NullPointerException这个问题如何处理?
import java.awt.*;public class drawonpanel {
Graphics2D g2d;
public drawonpanel(JPanel p) {
g2d =(Graphics2D) p.getGraphics();
System.out.println("inside of drawonpanel");
g2d.drawString("i am a boy!",50,50);
}
}import javax.swing.*;
public class Main {
JPanel p;
JFrame f;
drawonpanel pp;
public Main() {
p = new JPanel();
f = new JFrame();
pp = new drawonpanel(p);
f.getContentPane().add(p);
f.pack();
f.show();
} public static void main(String args[]){
new Main();
}
}
两个类,drawonpanle负责画图,Main负责显示,我把一个JPanle传到drawonpanle里了,但是程序执行到:g2d.drawString("i am a boy!",50,50);
会有异常显示:
java.lang.NullPointerException这个问题如何处理?
错了。当时的JPanel应该还没有与Graphics相关联,所以g2d为null
所以你得到的空指针异常应该是Graphics的对象的空指针
你可以先让整个窗口显示出来,然后再调用,这样的话就不会出空指针了
import java.awt.*;class drawonpanel extends JPanel{
Graphics2D g2d;
public drawonpanel() {
}
public void paint(Graphics g){
g2d =(Graphics2D) g;
System.out.println("inside of drawonpanel");
g2d.drawString("i am a boy!",50,50);
}
}public class Main {
JPanel p;
JFrame f;
drawonpanel pp;
public Main() {
//p = new JPanel();
f = new JFrame();
pp = new drawonpanel();
f.getContentPane().add(pp);
f.pack();
f.show();
} public static void main(String args[]){
new Main();
}
}
System.out.println("inside of drawonpanel");
这里g2d是null
import java.awt.*;public class drawonpanel {
Graphics2D g2d;
public drawonpanel(JPanel p) {
g2d =(Graphics2D) p.getGraphics();
g2d.setBackground(Color.BLUE);
g2d.drawString("i am a boy!",50,50);
g2d.drawLine(20,30,100,20);
}
}import javax.swing.*;
public class Main {
JPanel p;
JFrame f;
drawonpanel pp;
public Main() {
p = new JPanel();
f = new JFrame();
f.getContentPane().add(p);
f.pack();
f.show();
pp = new drawonpanel(p);
} public static void main(String args[]){
new Main();
}
}
* Tests.java
*
* Created on 2006年8月15日, 上午11:09
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/package ss;/**
*
* @author lbf
*/
import java.awt.*;
import javax.swing.*;
public class Tests extends JFrame implements Runnable{
private JPanel jp;
private int arc;
private Color c;
/** Creates a new instance of Tests */
public Tests(){
super("test");
jp=new JPanel();
this.getContentPane().add(jp,BorderLayout.CENTER);
this.setBounds(300,300,400,400);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Thread(this).start();
}
public void run(){
while(true){
try{
arc++;
Thread.sleep(10);
draw(jp);
if(arc==360){
arc=0;
c=new Color((int)(Math.random()*0xffffff));
}
}
catch(Exception exe){
exe.printStackTrace();
}
}
}
private void draw(JPanel p){
Graphics g=p.getGraphics();
g.setColor(c);
g.fillArc(50,50,100,100,0,arc);
}
public static void main(String args[]){
new Tests();
}
}
你试试这个,和你实现是一样的,我这里用了一个线程 一直在画,这样可以看得更清楚些
f.setSize(300,300);
f.setLayout(new BorderLayout());
应该就行了
lbfhappy(千里冰封) 非常感性你的帮助,现在我可以绘图了,但是当绘制图形的窗口大小改变后,图形就不见了,这个如何解决呢?谢谢
这个时候,你的绘制图形不是在paint方法里定义的,所以会消失掉
最好的办法就是重写paint方法,如果是swing下面的组件,那就重写paintComponent方法
这样的话,就不会消失了