Java Swing:从与JLayeredPane中的其他JPanel重叠的JPanel清除自定义绘图

我有一个JLayeredPane包含三个JPanels,其中两个重叠,我正在绘制形状。 重叠的两个JPanel中的一个需要将所有绘制的形状清除,而不会影响绘制到其下的JPanel的形状,从屏幕上消失。 目前我正在使用这样的东西:

Graphics g = pane2.getGraphics(); g.clearRect (0, 0, 1000, 1000); 

但这不仅清除了绘制到pane2的所有内容,还清除了下面的pane1。 所以我的问题是:有没有办法清除绘制到一个JPanel的所有内容而不影响任何绘制到JPanel下的内容?

我认为你可以通过这种方式清除它,然后以标准方式绘制它。 就像是:

 Graphics g = pane2.getGraphics(); g.clearRect (0, 0, 1000, 1000); super.paintComponent(g); 

您可能还需要重新绘制底部JPanel

如果你不能重新绘制底部JPanel例如,你没有任何形状的列表 – 那么我怀疑它可能无法在底部JPanel上恢复。

确保您的面板不透明。 我认为您需要以下代码:

 Graphics g = pane2.getGraphics(); g.clearRect (0, 0, 1000, 1000); pane2.repaint(0, 0, 1000, 1000); 

或者您应该能够使用以下内容强制重绘所有面板:

 layeredPane.repaint(); 

我认为你应该用clip来设置不应该替换的区域。 在面板2中,检测哪个区域不应被损坏并创建滚动矩形。 然后创建一个剪辑区域。 带有减去区域的矩形。 请参阅Area类以减去形状。