我是图形编程的新手。我正在尝试创建一个可以让你绘制有向图的程序。首先,我已经设法绘制了一组矩形(表示节点),并通过覆盖Java中的paint方法实现了平移和缩放功能。
在没有太多节点的情况下,这一切似乎都工作得相当好。我的问题是,当尝试绘制一个点网格时。一开始,我使用了一些简单的测试代码,使用两个嵌套的for循环覆盖了一个点网格:
int iPanX = (int) panX;
int iPanY = (int) panY;
int a = this.figure.getWidth() - iPanX;
int b = this.figure.getHeight() - (int) iPanY;
for (int i = -iPanX; i < a; i += 10) {
for (int j = -iPanY; j < b; j += 10) {
g.drawLine(i, j, i, j);
}
}
这使我可以平移网格,但不能缩放。然而,平移时的表现很糟糕!我做了很多搜索,但我觉得我肯定遗漏了一些明显的东西,因为我找不到任何关于这个主题的东西。
任何帮助或指点都将不胜感激。
--斯蒂芬
发布于 2009-08-06 01:43:45
使用BufferedImage作为点网格。初始化一次,然后只绘制图像,而不是一遍又一遍地绘制网格。
private init(){
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics g = image.getGraphics();
// then draw your grid into g
}
public void paint(Graphics g) {
g.drawImage(image, 0, 0, null);
// then draw the graphs
}
使用下面的代码可以轻松地实现缩放:
g.drawImage(image, 0, 0, null); // so you paint the grid at a 1:1 resolution
Graphics2D g2 = (Graphics2D) g;
g2.scale(zoom, zoom);
// then draw the rest into g2 instead of g
在缩放的图形中绘制将导致按比例增加线条宽度,等等。
发布于 2009-08-06 01:25:10
我认为每次鼠标移动时重新绘制所有的点都会给你带来性能问题。也许你应该考虑以位图的形式拍摄视图的快照并对其进行平移,当用户松开鼠标按键时“正确”地重新绘制视图?
https://stackoverflow.com/questions/1237759
复制相似问题