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类以减去形状。