【问题标题】:Java Swing: Clearing custom painting from a JPanel overlayed with other JPanels in a JLayeredPaneJava Swing:从 JLayeredPane 中与其他 JPanel 重叠的 JPanel 清除自定义绘画
【发布时间】:2011-08-05 08:46:38
【问题描述】:

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

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

但这不仅会清除绘制到窗格 2 的所有内容,还会清除它下方的窗格 1。所以我的问题是:有没有办法清除绘制到一个 JPanel 上的所有内容而不影响绘制到其下的 JPanel 上的任何内容?

【问题讨论】:

    标签: java swing jpanel paint jlayeredpane


    【解决方案1】:

    我认为您可以这样清除它,然后以标准方式对其进行绘制。比如:

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

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

    如果您无法重新绘制底部JPanel--例如,如果您没有任何位置的形状列表--那么我怀疑底部JPanel 可能无法恢复。

    【讨论】:

    • 但是以这种方式清除它不仅会清除该 JPanel 上的所有内容,还会清除其下方 JPanel 上的所有内容。我需要将绘制到 JPanel 下方的所有内容都保留在那里。
    • 哦,我想你可能需要重新绘制它下面的 JPanel。
    • 您如何准确地跟踪您绘制的形状?你有一些 ArrayList 或持有它们的东西,还是你只是将它们绘制到 JFrame 并在之后丢失它们?
    • 目前他们只是画然后丢失,我认为一个JPanel上的动作不会影响它下面的JPanel。我错了吗?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      确保您的面板不透明。我认为你需要这样的代码:

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

      或者您应该能够使用以下命令强制重新绘制所有面板:

      layeredPane.repaint();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-31
        • 2011-04-13
        • 1970-01-01
        • 1970-01-01
        • 2014-05-20
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多