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.
"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;)) –