Java 2D图形矩形

时间:2009-11-26 05:55:09

标签: java resize canvas awt paint

我正在尝试创建一个允许我在画布中绘制图形数据结构的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()并使它们粘住?

4 个答案:

答案 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对象上。这样您就不需要存储矩形,并且您有一个可以提高性能的缓冲区。