我在Java中遇到setClip的麻烦。我有一个扩展JPanel的类。在该类中,我重写了paintComponent方法。我的paintComponent方法看起来像这样:

paintComponent {
    //draw some lines here
    Rectangle whole = g2.getClipBounds();//g2 is my Graphics2D object
    Rectangle part = <some rectangle that is a part of the whole paintable area>;
    g2.setClip(part);
    //draw some more stuff here
    g2.setClip(whole);
}


我看到的问题是裁剪区域中的区域似乎被重复绘制。例如,如果我告诉它要绘画,它就可以绘画。但是,如果我切换窗口或以其他方式使它再次绘制相同的内容,则不会清除剪切区域,而其余区域则不会清除。这导致剪切区域上的绘画比其余可绘画区域显得更大胆。

我想我在setClip的工作方式中缺少了一些东西。

任何建议将不胜感激。在此先感谢您的帮助。

最佳答案

根据Tom的建议,从旧对象创建一个新的Graphics对象对我有用。

10-06 13:03