2012-04-08 106 views
1

没有使用super.paintComponent(g);我仍然可以清除我的Jpanel或Jframe屏幕吗?我在JPanel上绘制了一些图形,并且我想要在用户按下右键单击而不使用此方法时清除所有绘图。或者我说有super.paintCompenent(g)的任何替代;方法或方法像clrscr();在Java中。清除JPanel或JFrame

编辑

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); 



    } 
+0

后拉伸或不在您的JPanel simlpy你的代码。 – Jeffrey 2012-04-08 16:47:23

+0

您可以调用repaint并停止调用Graphics基元。如果你有组件,那么只需调用removeAll() – 2012-04-08 16:49:35

+0

@Jeffrey代码是什么?它太长。 – james 2012-04-08 16:49:59

回答

6

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(布尔)

+0

你是否错过了'if(draw)'后的'{}':-),这正是我想到的+1 :-)好的答案:-) – 2012-04-08 17:18:18

+0

@nIcEcOw y,我确实。我只是修复它。 – 2012-04-08 17:20:42

4

也许Graphics#clearRect是你在找什么形状?

+1

+1,我会与这个答案一起去。在OP中,只需在'mousePressed(...)'的某个地方放置一个布尔变量,并通过在'paintComponent(...)'方法内检查它来完成你在回答中所说的内容,否则像往常一样进行正常绘图:-) – 2012-04-08 17:11:17