2011-04-14 138 views
2

我有一个包含三个JPanel的JLayeredPane,其中两个重叠,我正在绘制形状。重叠的两个JPanel中的一个需要将其绘制到的每个形状都清除,而不会影响绘制到JPanel下的形状,然后从屏幕消失。目前我使用这样的事情:Java Swing:清除Jpanel中其他JPanel覆盖的JPanel的自定义绘画

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

但这不仅清除一切涂到pane2也pane1,这是在它之下。所以我的问题是:有没有什么办法可以清除所有绘制到一个JPanel的东西,而不会影响任何绘制到它下面的JPanel的东西?

回答

2

我想你可以用这种方式清除它,然后用标准的方式将其绘制。例如:

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

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

如果你不能重画底部JPanel - 例如,你没有任何形状的列表 - 然后我怀疑它可能无法在底部JPanel上恢复。

+0

但结算这种方式不仅对清除一切JPanel,但它下面的JPanel上的所有内容。我需要保留所有绘制到JPanel下面的JPanel。 – JBenson 2011-04-14 09:00:10

+0

哦,我想你可能需要重新绘制它下面的JPanel。 – 2011-04-14 09:01:03

+0

你究竟如何跟踪你绘制的形状?你有一些ArrayList或其他东西,或者你只是将它们绘制到JFrame并在之后失去它们? – 2011-04-14 09:12:03

2

我想你应该使用剪辑来设置不应该被替换的区域。 在面板2中检测哪个区域不应该被损坏,并创建圆形矩形。然后创建一个剪辑区域。减去面积的矩形。请参阅Area类以减少形状。

3

确保您的面板不透明。我想你需要像代码:

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

或者你应该能够使用以下方法来强制所有的面板重绘:

layeredPane.repaint();