我正在尝试创建一个允许我在画布中绘制图形数据结构的Java Applet。我将通过单击要创建节点的位置,然后单击节点来连接它们来完成此操作。问题是我无法使paint()
方法正常运行。我使用
mousePressed(MouseEvent e)
方法中向图表(和画布上的方块)添加新节点
Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);
一切正常,直到我调整窗口大小,然后所有填充的矩形消失。我把paint方法简化为一个空方法,但同样的事情仍然发生。我无法在paint()中添加fillRect命令,因为在用户使用鼠标与它交互之前我不知道存在哪些矩形。
如何在鼠标侦听器方法中使用g.fillRect()
并使它们粘住?
答案 0 :(得分:6)
我不知道我是否正确阅读了这个,但为什么不在调用paint()方法时将最后一次点击的位置存储在稍后要绘制的变量中?
答案 1 :(得分:6)
问题是你要吸引的地方不是持久的。在任何时候,你都可能失去你所吸引的一切。发生这种情况时会调用paint(Graphics)方法。每次发生这种情况时,您都需要重新绘制整个图片,或者您需要预留一个画布来绘制并根据需要将内容复制到您的applet的图形。
以下是创建和绘制图像的方法:
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html
然后,在您的paint方法中,使用Graphics的drawImage(...)方法显示您创建的图像。
答案 2 :(得分:0)
您必须覆盖窗口调整大小操作侦听器并调用repaint inside of it.
答案 3 :(得分:0)
图形是暂时的。当一个区域变脏时,它将重新粉刷。
最好的方法是创建一个BufferedImage,在mousePressed上绘制它并调用重绘 调用paint时,将Image绘制到传递的Graphics对象上。这样您就不需要存储矩形,并且您有一个可以提高性能的缓冲区。