2016-04-29 17 views
6

Ho fatto un gioco di impiccato per insegnarmi Java. Sono nel corpo principale del telaio.Java hangman game repaint() non funzionante

this.add(new PaintSurface(), BorderLayout.CENTER); 

ho:

private class PaintSurface extends JComponent { 
    Shape found = null; 

    public PaintSurface(){ 
     JOptionPane.showMessageDialog(null, "Repainting"); 
     Shape s; 
     msgbox("LL: " + intLivesLost); 
     switch(intLivesLost){ 
     //draw the Hanged man 
     case 10: 
      //Face + KILL 
     case 9: 
      //2nd Arm 
     case 8: 
      //1st Arm 
     case 7: 
      //2nd Leg 
     case 6: 
      //1st Leg 
     case 5: 
      //Body 
     case 4: 
      //Head 
      shapes.add(s); 
     case 3: 
      //Horizontal Bar 
      s = new Line2D.Float(100, 450, 250, 450); 
      shapes.add(s); 
      //Rope 
      s = new Line2D.Float(250, 450, 250, 500); 
      shapes.add(s); 
     case 2: 
      //Vertical Bar 
      s = new Line2D.Float(100, 450, 100, 670); 
      shapes.add(s); 
     case 1: 
      //Stand 
      s = new Line2D.Float(40, 670, 460, 670); 
      shapes.add(s); 
      break; 
     default: 
      break;   
     } 
    } 

    public void paint(Graphics g) { 
     Graphics2D g2 = (Graphics2D)g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
       RenderingHints.VALUE_ANTIALIAS_ON); 
     g2.setStroke(new BasicStroke(4)); 
     g2.setColor(Color.BLACK); 

     for (Shape count : shapes){ 
      g2.draw(count); 
     } 
    } 
} 

e sto usando:

repaint(); 

... tutto il progetto ogni volta che il telaio è aggiornato, nuova lettera indovinato, non corretta indovina, nuovo gioco.

Quando l'applicazione esegue per la prima volta JOptionPane.showMessageDialog (null, "Repainting"); si apre, quindi so che è stato chiamato allora. In seguito, non appare più il pop-up "Repainting", quindi so che il repaint(); le chiamate non stanno facendo nulla. So che il codice sta per ridipingere(); chiama, come ho messo un JOptionPane.showMessageDialog prima e dopo di loro.

Ho provato senza fortuna:

removeAll();
revalidate();
getContentPane(). Repaint();

Qualsiasi suggerimento e suggerimento per questo sarebbe molto apprezzato.

Edit: l'ho provato come si consiglia, inserendo il codice in "paint", penso che questo è come l'ho avuto prima, e non funziona ancora. Grazie comunque.

+0

"public PaintSurface() {...}" è il costruttore della classe PaintSurface. viene chiamato solo quando PaintSurface viene creato con "new PaintSurface()". La tua logica per creare l'oggetto forme dovrebbe essere posizionata altrove (probabilmente il metodo paint, ma non sono sicuro quindi questa non è una risposta;)) –

risposta

0

L'ho risolto, metto il disegno su un pannello separato e tutto funziona perfettamente. Grazie per l'aiuto.

1
  1. Non sovrascrivere la vernice, ignorare paintComponent o aggiornare invece in base alle proprie esigenze.
  2. Sembra che tu abbia una confusione tra il colore, il riverniciare e aggiornare i metodi. Leggi questo: https://www.guiguan.net/repaint-paint-and-update/ se stai facendo un gioco, il repaint() causerà il ridisegno dell'intero componente, quindi avrai dei problemi di prestazioni.