黑马程序员技术交流社区
标题:
关于GUI中在窗口里画点的问题
[打印本页]
作者:
宋蕈
时间:
2012-4-5 19:03
标题:
关于GUI中在窗口里画点的问题
本帖最后由 宋蕈 于 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()));
}
}
在直接点击画点的时候没有显示,但当把窗口关小了,在弹出来的时候,就把所有的点都显示出来?
应该怎么做 才能实现直接鼠标在上面点,点就出来的那种。。
作者:
王思兰
时间:
2012-4-5 19:51
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方法,就是没有进行重画,点是画在那里,但是没有重画,所以你看不见
作者:
宋蕈
时间:
2012-4-5 20:10
就是这样了。。呵呵。感谢。
作者:
宋蕈
时间:
2012-4-6 09:21
它在弹小窗口时,都会刷新窗口吧。
作者:
王思兰
时间:
2012-4-6 11:26
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
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2