import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.net.*;import javax.swing.*;
public class one extends JFrame {
Image i1,i2;
URL u1;
one() throws MalformedURLException
{
setSize(800,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try
{
u1=new URL("file:\\E:\\Users\\Administrator\\workspace\\test12\\src\\2.jpg");
    i1=Toolkit.getDefaultToolkit().getImage(u1);
Graphics g=getGraphics();
g.drawImage(i1,100,100,this);
}
catch(NullPointerException e)
{e.printStackTrace();}
}
public static void main(String[] args) throws MalformedURLException
{
one a=new one();
a.setVisible(true);
}

}

解决方案 »

  1.   

    应该写在public void paint(Graphics g)中
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.image.ImageObserver;
    import java.awt.image.ImageProducer;
    import java.net.*;import javax.swing.*;
    public class Test extends JFrame {
    Image i1,i2;
    URL u1;
    Test() throws MalformedURLException
    {
    setSize(800,500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    try
    {
    u1=new URL("file:\\E:\\Users\\Administrator\\workspace\\test12\\src\\2.jpg");
    //i1=Toolkit.getDefaultToolkit().getImage(u1);
    //Graphics g=getGraphics();
    //g.drawImage(i1,100,100,this);
    }
    catch(NullPointerException e)
    {e.printStackTrace();}
    }

    public void paint(Graphics g)
    {
    i1=Toolkit.getDefaultToolkit().getImage(u1);
    g.drawImage(i1,100,100,this);
    g.drawLine(0, 0, 540, 400);
    }

    public static void main(String[] args) throws MalformedURLException
    {
    Test a=new Test();
    a.setVisible(true);
    }}
      

  2.   

    为什么要写在public void paint(Graphics g)中呢。paint不是一个方法吗,
    为什么不调用paint方法,就可以显示图面呢
      

  3.   

    如果不写在paint里面,虽然可以通过getGraphics()获取的Graphics对象画图,但是一旦移动JFrame,或将JFrame的大小改变等,JFrame会重绘,由于没有写在paint()里面,所以原先画的会消失