2

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

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

但这不仅清除了绘制到窗格 2 的所有内容,还清除了它下方的窗格 1。所以我的问题是:有没有办法清除绘制到一个 JPanel 上的所有内容而不影响绘制到其下的 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 中检测哪个区域不应该被损坏并创建一个或多个矩形。然后创建一个剪辑区域。减去面积的矩形。请参阅区域类以减去形状。

于 2011-04-14T09:15:20.487 回答