import java.util.*;
public class MyMouseAdapterGeneric{
  public static void main(String args[]) {
    new MyFrame99("drawing...");
  }
}class MyFrame99 extends Frame  {//注意这里用泛型
  ArrayList<Point> points = null;
  MyFrame99(String s) {
    super(s);
    points = new ArrayList<Point>(); 
    setLayout(null);
    setBounds(300,300,400,300); 
    this.setBackground(new Color(204,204,255));
    setVisible(true);
    this.addMouseListener(new Monitor());//设置鼠标监听
    this.addWindowListener(new A()); 
                     
}

public void paint(Graphics g) {//重写画笔
    Iterator<Point> i = points.iterator();//使用泛型后,把所有点都遍历下
    while(i.hasNext()){
      Point p = i.next();
      g.setColor(Color.BLUE);
      g.fillOval(p.x,p.y,1,1);//遍历所有点并用蓝色的圆画出来
    }
  }
  
  public void addPoint(Point p){
    points.add(p);//定义 加入方法
  }
}
class A extends WindowAdapter{
   public void WindowClosing(WindowEvent e){
                      System.exit(0);
                     }
  }
//当鼠标点一下,就把图形里面画的圆画出来
class Monitor extends MouseAdapter {//利用MouseAdapter把所有的方法都实现了一遍,导致你不必每个都实现
  public void mousePressed(MouseEvent e) {//鼠标事件//这个代表鼠标按下去
    MyFrame99 f = (MyFrame99)e.getSource();
    f.addPoint(new Point(e.getX(),e.getY()));//加入点
    f.repaint();//重绘组件//Component 继承的方法//相当于刷新
  }
}为什么我点击关闭按钮关闭不了窗口呢?
我用匿名内部类也是一样。

解决方案 »

  1.   

    你将这个类修改成这样试试
    ---------------------------------------------
    class A extends WindowAdapter{ 
       public void WindowClosing(WindowEvent e){
           setVisible(false); //在这里加这一句
           System.exit(0); 

    ---------------------------------------------
      

  2.   

    另外忘了引入这两个包了吧import java.awt.*;
    import java.awt.event.*;
      

  3.   

    import java.awt.*;
    import java.awt.event.*;public class TestPaint {
    public static void main(String[] args) {
    PaintFrame p=new PaintFrame();
                    p.launchFrame();
    }
    }class PaintFrame extends Frame {

    public void launchFrame() {
    setBounds(200,200,640,480);//设置窗口大小
    setVisible(true);//显示
                    addWindowListener(new WindowAdapter(){
                      public void WindowClosing(WindowEvent e){
                       
                       System.exit(0);
                        }
                  });
    }

    public void paint(Graphics g) {//Container 继承的方法
    //重写方法,并且自动调用的,什么时候重画调用呢?每次第一次显示的时候,如改变窗口大小,切换等
    Color c = g.getColor();//拿到当前画笔颜色
    g.setColor(Color.red);//设置红色
    g.fillOval(50, 50, 30, 30);//画椭圆.注意是 矩形内切
    g.setColor(Color.green);//设置椭圆颜色 绿
    g.fillRect(80,80,40,40);//设置矩形 
    g.setColor(Color.black);//设置蓝色
    g.drawOval(12,54,43,6);
    g.drawLine(331, 144, 88, 99);//由于是抽象的方法,但还能调用,说明有多态的存在
    g.drawArc(123,65,212,1554,43,216);
    g.setColor(c);//恢复现场
    }

    }
    这咯也是,为什么啊 ?
      

  4.   

    你试试我写的这个,我jdk出问题了现在没法测试。顺便问下你是学尚学堂的课程了吧?
    --------------------------------------------------------
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;public class DrawPoint {
    public static void main(String[] args) {
    new PointFrame("PointFrame");
    }
    }class PointFrame extends Frame {

    ArrayList<Point> points = null; 

    PointFrame(String title) {
    super(title);
    points = new ArrayList();
    setLayout(null);
    setBounds(300, 300, 500, 300); 
    addMouseListener(new MouseMonitor());
                    AddWindowListener(new WindowMonitor());
    setVisible(true);
    } public void paint(Graphics g) {
    Iterator<Point> i = points.iterator();
    Color c = g.getColor();
    while(i.hasNext()) {
    Point p = i.next();
    g.setColor(Color.orange);
    g.fillOval((int)p.x, (int)p.y, 10, 10);
    }
    g.setColor(c);
    }

    public void addPoint(Point p) {
    points.add(p);
    }

    class WindowMonitor extends WindowAdapter {
    public void windowClosing(WindowEvent e) { 
    setVisible(false);
    System.exit(0);
    }
    }

    }class MouseMonitor extends MouseAdapter {
    public void mousePressed(MouseEvent e) {
    PointFrame pf = (PointFrame)e.getSource();
    Point p = new Point(e.getX(), e.getY());
    pf.addPoint(p);
    pf.repaint(); 
    }
    }
    -----------------------------------------------------------
      

  5.   

    你原来那个改成这样试试,不好意思我现在没法测试
    import java.awt.*; 
    import java.awt.event.*;
    import java.util.*; 
    public class MyMouseAdapterGeneric{ 
      public static void main(String args[]) { 
        new MyFrame99("drawing..."); 
      } 
    } class MyFrame99 extends Frame  {//注意这里用泛型 
      ArrayList <Point> points = null; 
      MyFrame99(String s) { 
        super(s); 
        points = new ArrayList <Point>();  
        setLayout(null); 
        setBounds(300,300,400,300);  
        this.setBackground(new Color(204,204,255)); 
        setVisible(true); 
        this.addMouseListener(new Monitor());//设置鼠标监听 
        this.addWindowListener(new A());  
         
       class A extends WindowAdapter{  
         public void WindowClosing(WindowEvent e){ 
           setVisible(false); //在这里加这一句 
            System.exit(0);  
    }  
                 
    } public void paint(Graphics g) {//重写画笔 
        Iterator <Point> i = points.iterator();//使用泛型后,把所有点都遍历下 
        while(i.hasNext()){ 
          Point p = i.next(); 
          g.setColor(Color.BLUE); 
          g.fillOval(p.x,p.y,1,1);//遍历所有点并用蓝色的圆画出来 
        } 
      } 
       
      public void addPoint(Point p){ 
        points.add(p);//定义 加入方法 
      } 

     
    //当鼠标点一下,就把图形里面画的圆画出来 
    class Monitor extends MouseAdapter {//利用MouseAdapter把所有的方法都实现了一遍,导致你不必每个都实现 
      public void mousePressed(MouseEvent e) {//鼠标事件//这个代表鼠标按下去 
        MyFrame99 f = (MyFrame99)e.getSource(); 
        f.addPoint(new Point(e.getX(),e.getY()));//加入点 
        f.repaint();//重绘组件//Component 继承的方法//相当于刷新 
      }