A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 宋蕈 中级黑马   /  2012-4-5 19:03  /  1916 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 宋蕈 于 2012-4-5 19:05 编辑

C:\Documents and Settings\Administrator\桌面\入学\问题4.jpgimport java.awt.*;
import java.awt.event.*;
import java.util.*;

public class MyMouseAdapter{
        public static void main(String[] args){
                new MyFrame("text");
        }
}

class MyFrame extends Frame{
        ArrayList points=null;

        MyFrame(String s){
                super(s);
                points=new ArrayList();
                setLayout(null);
                setSize(400,300);
                setBackground(new Color(204,204,255));
                setVisible(true);
                this.addMouseListener(new MyMonitor());
        }

        public void paint(Graphics g){
                Iterator i=points.iterator();
                while(i.hasNext()){
                        Point p=(Point)i.next();
                        g.setColor(Color.blue);
                        g.fillOval(p.x,p.y,10,10);
                }
        }

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

class MyMonitor extends MouseAdapter{
        public void mousePressed(MouseEvent e){
                MyFrame f=(MyFrame)e.getSource();
                f.addPoint(new Point(e.getX(),e.getY()));
        }
}

在直接点击画点的时候没有显示,但当把窗口关小了,在弹出来的时候,就把所有的点都显示出来?
应该怎么做 才能实现直接鼠标在上面点,点就出来的那种。。

4 个回复

倒序浏览
class MyMonitor extends MouseAdapter{
        public void mousePressed(MouseEvent e){
                MyFrame f=(MyFrame)e.getSource();
                f.addPoint(new Point(e.getX(),e.getY()));
                f.repaint();//要在这里调用repaint的方法,强制重画,
        }
}
repaint()方法调用了update方法,update方法又调用了paint方法,如果直接调用paint方法,就是没有进行重画,点是画在那里,但是没有重画,所以你看不见

回复 使用道具 举报
  就是这样了。。呵呵。感谢。
回复 使用道具 举报
它在弹小窗口时,都会刷新窗口吧。
回复 使用道具 举报
paint是系统回调函数,用户不能主动调用,需要进行重绘时,要使用repaint方法,当用户调用repaint方法后,实际上,系统后台调用了paint方法,所以,把的绘制代码或清除代码要写到paint方法中,然后需要绘制或清除的时候,调用repaint方法,
绘制完成后,立即调用repaint函数,要求系统重画GUI,这样才能显示出paint中设定的Graphics样式。否则在没有调用repaint之前,Java系统是不会自行调用paint进行重绘的,
对于标准组件,比如按纽等,有个awt线程负责控制,不用我们来处理,这就是你说的系统自动重画.
而对于自己画的东西,比如画布(canvas)、自定义的图象等,则需要自己写程序去控制(repaint)。而自定义图象的绘画就在paint方法中
这是在网上看到的,http://blog.csdn.net/novelly/article/details/6871180
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马