【问题标题】:Clear JPanel or JFrame清除 JPanel 或 JFrame
【发布时间】:2012-04-09 01:20:20
【问题描述】:

如果不使用super.paintComponent(g);,我还能清除我的 Jpanel 或 Jframe 屏幕吗?我在 JPanel 上绘制了一些形状,当用户在不使用此方法的情况下按下右键时,我想清除所有绘图。或者我说有没有 super.paintCompenent(g) 的替代方法或方法,如 clrscr(); 在 Java 中。

编辑

  public void mousePressed(MouseEvent e) {
            super.paintComponents(null); //i want to use this method here?? how can i? 
            if(e.isPopupTrigger())
            {
                s=e.getX();
                as=e.getY();
              try {
                    Thread.sleep(10L);
                } catch (InterruptedException ex) {
                    Logger.getLogger(animate.class.getName()).log(Level.SEVERE, null, ex);
                }
        p.repaint();
            }
        }

我正在画这样的形状

public class mypanel extends JPanel {

   @Override
    public void paintComponent(Graphics g)
    {

       super.paintComponent(g);
        Graphics2D g2=(Graphics2D)g ;

        Color[] c = {Color.BLUE, Color.RED, Color.GREEN, Color.YELLOW, 
                 Color.MAGENTA, Color.WHITE, Color.ORANGE, Color.PINK};
    for(int i=0; i<8; ++i){
        g2.setColor(c[i]);
        int start_angle=i*45;
    g2.fillArc(mx-100, my-100, 200, 200, start_angle,45);



    }

【问题讨论】:

  • 您可以调用重绘并停止调用图形基元。如果你有组件,那么只需调用 removeAll()
  • @Jeffrey 代码是什么?太长了。
  • @james 发布 SSCCE 然后:sscce.org

标签: java swing graphics drawing


【解决方案1】:

mre 解决方案实际上是一个好主意,但是如果另一个重绘出现,您可能会遇到问题(因为您移动了 JFrame,因为您调整了它的大小,因为另一个窗口出现在它上面然后离开,等等...)

或者,您可以使用以下方式使更改永久生效:

public class mypanel extends JPanel {

    private boolean draw = true;

    @Override
    public void paintComponent(Graphics g)
    {

        super.paintComponent(g);
        if (draw) {
            Graphics2D g2=(Graphics2D)g ;

            Color[] c = {Color.BLUE, Color.RED, Color.GREEN, Color.YELLOW, 
                     Color.MAGENTA, Color.WHITE, Color.ORANGE, Color.PINK};
            for(int i=0; i<8; ++i){
                g2.setColor(c[i]);
            int start_angle=i*45;
            g2.fillArc(mx-100, my-100, 200, 200, start_angle,45);
        }
    }

    public void setDraw(boolean draw) {
        this.draw = draw;
        repaint();
    }
}

然后您可以通过调用 mypanel.setDraw(boolean) 在您的 JPanel simlpy 中绘制或不绘制

【讨论】:

  • 您是否在if (draw) 之后错误地错过了{} 的限制:-),这正是我想到的+1 :-) 不错的答案:-)
  • @nIcEcOw 是的,我确实做到了。我刚刚修好了。
【解决方案2】:

也许Graphics#clearRect 就是你要找的东西?

【讨论】:

  • +1,我会接受这个答案。 OP 并简单地将boolean variable 放在某处,使其在mousePressed(...) 处成为现实,并按照您在答案中所说的进行检查,方法是在paintComponent(...) 方法中检查它,否则像往常一样进行正常绘图:-)跨度>
猜你喜欢
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 2012-03-21
  • 2011-01-30
  • 2013-08-20
相关资源
最近更新 更多