我有一个算法可以在 JPanel 上显示漂亮的分形。每当用户将鼠标悬停在面板上时,我希望能够在分形面板上显示网格线“十字准线”。
我已经通过一种快速、简单的方法来绘制这样的东西(fractal
是分形 JPanel 的名称)来实现这一点:
@Override
public void mouseMoved(MouseEvent e) {
Graphics g = fractal.getGraphics();
// <problematic part>
// This is computationally expensive to do. It takes a good 0.2 seconds.
// This must be done to clear 'old' crosshairs
fractal.repaint();
// </problematic part>
Color c = fractal.getColourScheme().getGridlineColour();
g.setColor(new Color(c.getRed(), c.getGreen(), c.getBlue(), 50));
// Draw crosshairs around the mouse's current point
g.drawLine(e.getX(), 0, e.getX(), fractal.getHeight());
g.drawLine(0, e.getY(), fractal.getWidth(), e.getY());
}
如图所示,我必须 repaint() 以清除任何旧的十字准线。
我有一种感觉,我需要在诸如 Glass Pane 之类的东西上绘制我的十字准线才能放在我的 JPanel 之上——但是,JPanel 不提供 Glass Pane。JRootPane 可以——我可以用它来代替吗?
附言
Line2D
目前我正在用很多小s逐个像素地绘制分形。我最终会将其更改为生成BufferedImage
- 在这种情况下,这个问题甚至会重要吗?