【发布时间】:2012-10-14 04:15:19
【问题描述】:
我正在使用 swing 编写一个 java 应用程序,我需要在其中绘制一个正方形上方的网格。为此,我使用了Graphics 类提供的drawLine(...) 方法。
除了绘制每条线需要很长时间(50 条线超过 20 秒......)之外,一切都很好。我什至可以看到实时绘制的线条。一件奇怪的事情是水平线的绘制速度比垂直线快(几乎是瞬间)。
我可能做错了什么。这是网格的代码。
public void drawGrid(Graphics g){
g.setColor(new Color(255, 255, 255, 20));
int width = getWidth();
int height = (int) (width * Utils.PLATE_RATIO);
int step = pixelSize*gridSpacing;
Color bright = new Color(255, 255, 255, 100);
Color transparent = new Color(255, 255, 255, 20);
for(int ix = insets.left + step;
ix < width; ix += step){
if(((ix - insets.left) / step) % 10 == 0){
g.setColor(bright);
}
else{
g.setColor(transparent);
}
g.drawLine(ix, insets.top, ix, height+insets.top);
}
for(int iy = insets.top+step;
iy < (insets.top + height); iy += step){
if(((iy - insets.top) / step) % 10 == 0){
g.setColor(bright);
}
else{
g.setColor(transparent);
}
g.drawLine(insets.left, iy, width + insets.left, iy);
}
}
【问题讨论】:
-
当然可以,我怎么这么笨。谢谢!
-
@SureshKumar swing 组件默认是双缓冲的...
-
@SureshKumar 同意 kleopatra 的观点——你不能仅仅通过这部分代码来判断他是否使用双缓冲绘画策略。并且提供的代码完全没问题。
-
单缓冲永远不会花那么长时间。
标签: java swing graphics fullscreen doublebuffered