在awt中窗体在启动的时候会调用
paint(Graphics g)方法来完成重绘
所以我一般都在这个方法里画点东西 图片或者一些基本图形之类问题
我在其他地方可不可以绘制图形  意思就是 在窗体加载完毕之后随着 鼠标或者键盘事件  在窗体上绘制我需要的东西,我试过用 Graphics g=this.getGraphics();获得Graphics的引用来绘制 结果这里的g是空的  程序运行将抛出NullPointerException异常除了在窗体上添加Canvas画布  还有其他什么方法可以 随时随地的绘制图形吗

解决方案 »

  1.   

    1,可以,绘制完之后需要repaint()重绘。2,Graphics g图形上下文是图形组件绑定到具体的图形设备上才创建的,一般来说对JFrame使用setVisible(true)方法让其显示到屏幕也就是和图形设备进行了绑定,此时对组件使用getGraphics()才不会返回null。有种方法可以在组件可见之前让getGraphics()方法返回非null值,就是在此方法之前调用窗体的addNotify()方法。3,Canvas其实也只是一个普通的Component,可以用任何一个Component的子类充当画布,Swing中的话最好用轻量级组件,比如JPanel之类。不想添加画布的话可以直接在窗体中绘制,事实上Applet小程序通常都是这么干的。
      

  2.   

    照楼上所说  只要我先用 setVisible方法让其显示到屏幕也就是和图形设备进行绑定  这个
    Graphics g=this.getGraphics();才有用是吧 我试试去 能用就结帖子了
      

  3.   

    this.setResizable(false);
    Graphics g=this.getGraphics();
    g.drawString("asdfasdf", 200, 60);
    我用这个画一个字符串  为什么在窗口打开的瞬间只能看到这个字符串闪一下就没了   怎么保留绘制的结果呢
      

  4.   

    已经解决了
    this.setResizable(false);
    this.addNotify();//加了这样一句话   
            Graphics g=this.getGraphics();
            g.drawString("asdfasdf", 200, 60);呵呵 谢谢啦