2011-04-14 75 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();