import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class 图形界面入门 {
 public static void main(String argv[])
 {draw p=new draw();
 }
}class draw extends JFrame  
{
 public draw()
  {setLayout(new GridLayout(2,1));
   getContentPane().add(new in1());
   getContentPane().add(new in());
   Dimension p=Toolkit.getDefaultToolkit().getScreenSize();
   int x=p.width;
   int y=p.height;
   setLocation((x-500)/2,(y-500)/2);
   setSize(500,500);
   setVisible(true);
   setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
  }
  
}class in extends JPanel  
{
 private JButton p;
 private JButton q;
 private in1 s=new in1();
 public in()
 {p=new JButton("OK");
  q=new JButton("Cancel");
  add(p);
  add(q);
  p.addActionListener(s);
  q.addActionListener(s); 
  
 }
}class in1 extends JPanel  implements ActionListener
{private Graphics g;
 public void actionPerformed(ActionEvent e)
  {g=getGraphics();
   super.paintComponent(g);
   if(e.getActionCommand().equals("OK"))
   //总是下面这里出错
  g.drawString("OK is clicked",getWidth()/2,getHeight()/5);
   if(e.getActionCommand().equals("Cancel"))
 //总是下面这里出错
  g.drawString("Cancel is clicked",getWidth()/2,getHeight()/5);
   g.dispose();
  }
 
}这里是问题
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at in1.paintComponent(图形界面入门.java:61)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paintWithOffscreenBuffer(Unknown Source)
at javax.swing.JComponent.paintDoubleBuffered(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
at java.awt.Container.paint(Unknown Source)
at sun.awt.RepaintArea.paintComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

解决方案 »

  1.   

    //总是下面这里出错
      g.drawString("Cancel is clicked",getWidth()/2,getHeight()/5);
    这里的
      

  2.   

    e是ActionEvent类型 ,里面没有drawString()这个方法啊
      

  3.   

    public void actionPerformed(ActionEvent e)
      {
      }
    老大,这个是监听事件
    都是button事件,你居然注册两边
    不知道有个 叫事件源的东西吗? 可以区分是哪个按钮触发的事件
    public class 图形界面入门{}========
    这个不是一般的强悍,学校里怎么学的,如果是自学,最简单的命名规则都不知道吗?
      

  4.   

    p=new JButton("OK");
      q=new JButton("Cancel");
      add(p);
      add(q);
      p.addActionListener(s);
      q.addActionListener(s); 
    不好意思,我比较笨,这里我是在JButton上注册得的啊
      

  5.   

    public class 图形界面入门{}========
    这个不是一般的强悍,学校里怎么学的,如果是自学,最简单的命名规则都不知道吗?
    /////////////////////////////////////////////////////////////////////////////
    同意,没有这样命名的啊,虽然意思详细明了
      

  6.   

    报的不是空指针异常吗?是不是g没有被实例化
    GUI这一块不熟。
      

  7.   

    g=getGraphics();
    这里好象应该是实例化了,我之所以没有在第二个类中实现监听,是因为布局的原因.
    题目是让我在距离两个JButton上方很远的地方显示点击了哪个按扭,但是如果我放在第二个类中的话,我无法在制定地方显示String,所以我单独拿出一个类实现监听,同时可以显示String
      

  8.   

    在new in1的时候,传一个this过来,然后g= in.getGraphics()试试
    用一个匿名内部类多方便