2

3つのJPanelを含むJLayeredPaneがあり、そのうちの2つは重なり合っており、シェイプをペイントしています。オーバーラップする2つのJPanelの1つは、その下のJPanelに描画された形状に影響を与えずに、描画されたすべての形状をクリアする必要があります。現在、私は次のようなものを使用しています:

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

ただし、これにより、pane2にペイントされたすべてのものだけでなく、その下にあるpane1もクリアされます。だから私の質問は:その下のJPanelに描かれたものに影響を与えることなく、1つのJPanelに描かれたすべてをクリアする方法はありますか?

4

3 に答える 3

3

パネルが不透明でないことを確認してください。次のようなコードが必要だと思います。

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

または、以下を使用して、すべてのパネルを強制的に再描画できるはずです。

layeredPane.repaint();
于 2011-04-14T15:31:58.617 に答える
2

そのようにクリアしてから、標準的な方法でペイントすることができると思います。何かのようなもの:

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

また、下部を塗り直す必要がある場合もありますJPanel

底を塗り直すことができない場合JPanel(たとえば、どこにも形状のリストがない場合)、底で回復できない可能性があると思いますJPanel

于 2011-04-14T08:52:28.913 に答える
2

クリップを使って、置き換えてはいけない領域を設定するべきだと思います。パネル2で、どの領域が損傷してはならないかを検出し、ローパー長方形を作成します。次に、クリップ領域を作成します。面積を差し引いた長方形。形状を差し引くには、Areaクラスを参照してください。

于 2011-04-14T09:15:20.487 に答える