Ich habe ein Hangman-Spiel gemacht, um mich selbst Java beizubringen. Ich habe den Hauptteil des Rahmens.Java Hangman Spiel Repaint() funktioniert nicht
this.add(new PaintSurface(), BorderLayout.CENTER);
Ich habe:
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);
}
}
}
Und ich bin mit:
repaint();
... während des gesamten Projekts jedes Mal, wenn der Rahmen aktualisiert wird, neue Buchstaben erraten, fehlerhafte denke, neues Spiel.
Wenn die Anwendung zuerst JOptionPane.showMessageDialog (null, "Repainting") ausgeführt wird; erscheint, also weiß ich, dass es dann genannt wurde. Danach erscheint das "Repainting" Pop-Up nicht mehr, daher weiß ich, dass das Repaint(); Anrufe tun nichts. Ich weiß, dass der Code zum Repaint() kommt; Anrufe, wie ich einen JOptionPane.showMessageDialog vor und nach ihnen gestellt habe.
Ich habe ohne Glück versucht:
removeAll();
revalidate();
getContentPane(). Repaint();
Alle Hinweise und Tipps dafür würden sehr geschätzt werden.
Edit: Ich habe es versucht, wie Sie empfehlen, setzen Sie den Code in "Farbe", denke, das ist, wie ich es vorher hatte, und es funktioniert immer noch nicht. Trotzdem danke.
"public PaintSurface() {...}" ist der Konstruktor der PaintSurface-Klasse. Es wird nur aufgerufen, wenn PaintSurface mit "new PaintSurface()" erstellt wird. Deine Logik, um das Shapes-Objekt zu erstellen, sollte irgendwo anders sein (wahrscheinlich die Paint-Methode, aber ich bin mir nicht sicher, das ist also keine Antwort;)) –