2012-04-08 11 views
1

super.paintComponent(g);を使用しないと、JpanelまたはJframeの画面をクリアできますか?私はJPanelに描かれたいくつかの図形を持っており、このメソッドを使わずに右クリックを押すとすべての図面をクリアしたい。または私は言うsuper.paintCompenent(g)の任意の代替です; clrscr(); Javaのような方法や方法です。JPanelまたはJFrameをクリア

EDIT

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

ポスト(ブール値)mypanel.setDrawを呼び出すことによって、あなたのJPanel simlpyに描画したりすることはできませんあなたのコード。 – Jeffrey

+0

再描画を呼び出してGraphicsプリミティブの呼び出しを停止することができます。コンポーネントがある場合は、removeAll()を呼び出します。 –

+0

@Jeffreyのコードは何ですか?その長すぎる。 – james

答えて

6

mre解決策は実際には良いアイデアですが、別の再描画が行われると問題が起きる可能性があります(JFrameを移動するため、サイズを変更するので、別のウィンドウが上に来てleavsなどがあります) )

また、あなたは永久的な変化を作るために、このようなものを持つことができます。

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

をそしてあなただけの

+0

誤って 'if(draw)'の後に '{}'の限界を逃しましたか?それはちょうど私が+1のことを考えたものです:-) Nice Answer :-) –

+0

@nIcEcOwええ、私は確かにしました。私はただそれを修正した。 –

4

おそらくGraphics#clearRectのような形状を塗っていますあなたが探しているものでしょうか?

+1

+1、私はこの答えに行きます。 OPは単に 'boolean variable'をどこかに置いて、' mousePressed(...) 'でtrueにして、あなたの答えに' paintComponent(...) 'メソッド内でチェックしていつものように通常の作図をしてください:-) –

関連する問題