2012-04-08 2 views
1

Sans utiliser super.paintComponent(g); Puis-je effacer mon écran Jpanel ou Jframe? J'ai des formes dessinées sur JPanel et je veux effacer tout le dessin lorsque l'utilisateur appuie sur le bouton droit sans utiliser cette méthode. ou je dis qu'il existe une alternative de super.paintCompenent(g); méthode ou méthode comme clrscr(); En Java.Effacer JPanel ou 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(); 
      } 
     } 

je peins la forme comme celui-ci

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

Poster votre code. – Jeffrey

+0

vous pouvez appeler repeindre et arrêter d'appeler des primitives graphiques. Si vous avez des composants, appelez simplement removeAll() –

+0

@Jeffrey code pour quoi? c'est trop long. – james

Répondre

6

mre solution est en fait une bonne idée, mais vous pouvez avoir des problèmes si une autre repeint (parce que vous déplacez le JFrame, parce que vous le redimensionnez, parce qu'une autre fenêtre vient au dessus, puis leavs, etc ...)

Alternativement, vous pouvez avoir quelque chose comme ça pour faire le changement permanent:

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

et vous pouvez simplement dessiner ou pas dans votre JPanel simlpy en appelant mypanel.setDraw (Boolean)

+0

As-tu manqué les limites '{}' après 'si (dessine)' par erreur :-), C'est exactement ce que j'ai pensé de +1 pour ça :-) Bonne réponse :-) –

+0

@nIcEcOw yup, je l'ai bien fait. Je viens de le réparer. –

4

Peut-être Graphics#clearRect est ce que vous cherchez?

+1

+1, je vais aller avec cette réponse. L'OP et simplement mettre une variable booléenne quelque part, la rendre vraie à mousePressed (...) ', et faire ce que vous avez dit dans votre réponse, en la vérifiant dans la méthode' paintComponent (...) ', sinon fais le dessin normal comme d'habitude :-) –