Fensterinhalt vor ausführen von repaint komplett löschen.

Status
Nicht offen für weitere Antworten.

Junker

Neues Mitglied
Moin zusammen.

Ich habe die Aufgabe als Übung ein simples Mühle-Programm zu schreiben bei dem das Spielfeld in einem Fenster gezeichnet wird.

Es funktioniert erstmal auch alles, allerdings gibt es folgendes Problem:

Wenn ein Stein verschoben wird, wird das Fenster mittels repaint komplett neu gezeichnet. Dazu wird eine Tabelle abgefragt in der jeder gesetzte Stein eingetragen ist, so dass nur die Steine gezeichnet werden die aktuell gesetzt sind. Sonst müsste ich bei Bewegungen von Steinen den alten Stein aus der Grafik immer löschen, war mir zu umständlich.
Jedenfalls in der Theorie klappt das soweit, und Kollegen versicherten mir auch dass diese Ansatzweise soweit sinnig ist.

Problem:
Beim neuzeichnen des Fensters, wird nur das alte Bild "überzeichnet". Sprich wo vorher ein Stein war, ist der weiterhin zu sehen, nur die Feldlinien und Eckpunkte des Mühlefelds überlagern den.
Eigentlich sollte vom vorigen Stein, wenn er bewegt wurde, dann nichts mehr zu sehen sein.

Erstmal der Konstruktor:
Java:
public Mühle() throws IOException
	  {		
	    super("Eine Partie Mühle");
		this.setResizable(false);
	    addWindowListener(new WindowClosingAdapter(true));
	    setBackground(Color.orange);
	    setSize(intWSize,intWSize);
	    setVisible(true);
	  }

Hier mal die for-Schleife mit der paint alle gesetzten Steine zeichnet.
Java:
public  void paint(Graphics g)
	  {		  
//Zuerst werden alle Linien und Eckpunkte gezeichnet. Nachfolgend werden die aktuell gesetzten Steine gezeichnet
		  for (int i = 0; i <25; i++){
			  if (htSteinListe.get(i) != null){
				  int x = intPosList[i][0];
				  int y = intPosList[i][1];
				  if (htSteinListe.get(i) == "Computer"){
					  g.fillOval(x-8, y-8,16,16);
				  }
				  if (htSteinListe.get(i) == "Spieler"){
					  g.setColor (Color.white);
					  g.fillOval(x-8, y-8,16,16);
					  g.setColor (Color.black);

				  }
			  }
		  }
	  }

Nachfolgend die methode CPMove die den Stein des Computers bewegt.

Java:
	  public void moveCPStone(){
		  int intCPStartPosition = 99;
		  while (htSteinListe.get(intCPStartPosition) != "Computer"){
			  intCPStartPosition = (int)(Math.random()*25);
		  }
		  int intCPNewPosition = 99;
		  System.out.println("Computer nimmt Stein " + intCPStartPosition);
		  for (int i = 0; i< 4; i++){
		  	if (intMoveList[intCPStartPosition][i] != 0 && htSteinListe.get(intMoveList[intCPStartPosition][i]) != "Computer"
				  && htSteinListe.get(intMoveList[intCPStartPosition][i]) != "Spieler"){
		  		intCPNewPosition = intMoveList[intCPStartPosition][i];
		  		System.out.println("Computer bewegt Stein " + intCPStartPosition + " auf Position " + intCPNewPosition);
				  htSteinListe.put(intCPNewPosition, "Computer");
				  htSteinListe.remove(intCPStartPosition);
				  i = 4; //Schleife wird hiermit beendet.
				  repaint();
			  }
		  }
		  if (intCPNewPosition == 99){
		  		System.out.println("Computer wollte einen Stein bewegen der eingekeilt war. Spieler ist wieder am Zug.");
		  }
	}

Das ganze programmiere ich unter MacOS mit Eclipse.

Hier mal zwei Screenshots:
Muehle01.jpg

So sieht es aus wenn nach dem Spielstart alle Steine gesetzt wurden. Soweit noch alles in Ordnung.

Jetzt setze ich als Spieler (weiß) den Stein an Stelle 1 auf die Stelle 10:
Muehle02.jpg


Wie ihr seht ist der Stein an Stelle 1 jetzt noch zu sehen, auch wenn die neugezeichneten Feldmarkierungen ihn überdecken.

Wie kann ich es anstellen dass der alte Stein vom Hintergrund überdeckt wird, bzw. dass er nichtmehr sichtbar ist?
Hab schon einige Quellen zu Rate gezogen, aber nichts gefunden das mir half. Muss aber zugeben dass mein Verständnis von paint() noch recht lückenhaft ist.

Hoffe aber hier weiß jemand Rat.
 
G

Gast2

Gast
Ich würde dir empfehlen ein JPanel zum Zeichnen zu verwenden und dann die
Code:
paintComponent()
zu überschreiben.
Um alles wieder zu löschen musst du die
Code:
super.paintComponent()
aufrufen

In deinem Fall wäre es
Code:
super.paint()
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Swing Fensterinhalt verändern AWT, Swing, JavaFX & SWT 3
J Fensterinhalt bei Klick auf Menüitem wechseln AWT, Swing, JavaFX & SWT 1
B Swing Fensterinhalt aktualisieren AWT, Swing, JavaFX & SWT 11
R Fensterinhalt erscheint erst, wenn das Fenster verändert wird AWT, Swing, JavaFX & SWT 7
O Fensterinhalt löschen und neu generieren AWT, Swing, JavaFX & SWT 2
M Windows-Fensterinhalt in Java-Applikation darstellen AWT, Swing, JavaFX & SWT 6
G Anfängerfrage: Fensterinhalt ändern AWT, Swing, JavaFX & SWT 4
I Fensterinhalt drucken AWT, Swing, JavaFX & SWT 2
K [SWT] Fensterinhalt ändern. AWT, Swing, JavaFX & SWT 2
B Fensterinhalt baut sich erst bei Größenveränderung auf AWT, Swing, JavaFX & SWT 3
G bild aus fensterinhalt AWT, Swing, JavaFX & SWT 5
MiMa JavaFX JAR unter Windows ausführen schlägt fehl? AWT, Swing, JavaFX & SWT 5
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
berserkerdq2 Mein Rechteck hat 4 Seiten, ich soll je nach dem, welche Seite berührt wurde, etwas ausführen, wie prüfe ich das? AWT, Swing, JavaFX & SWT 12
Z Methode bei Boolean change neu Ausführen AWT, Swing, JavaFX & SWT 9
J Java Datei durch CMD mit Parameter ausführen AWT, Swing, JavaFX & SWT 1
MasterCaution Swing .jar Datei ausführen AWT, Swing, JavaFX & SWT 12
Ø Swing Button in anderer Klassen ausführen AWT, Swing, JavaFX & SWT 6
M Aktion ausführen wenn ein JRadiobutton deselektiert wird. AWT, Swing, JavaFX & SWT 3
T .jar-Datei lässt sich unflexibler ausführen als über die IDE AWT, Swing, JavaFX & SWT 11
A Methode in bestimmten Intervall ausführen AWT, Swing, JavaFX & SWT 2
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
E JavaFX JavaFX Application in Thread ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
C Swing GUI extrem langsam - GUI-Code richtig ausführen AWT, Swing, JavaFX & SWT 1
J Programm im GUI ausführen AWT, Swing, JavaFX & SWT 4
B Ressourcen laden beim Ausführen der .jar nicht schnell genug AWT, Swing, JavaFX & SWT 2
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
B Nach dem Öffnen des Dialogs eine Aktion ausführen. AWT, Swing, JavaFX & SWT 6
J Nach Timer ausführen AWT, Swing, JavaFX & SWT 6
T Bei Klick Code ausführen AWT, Swing, JavaFX & SWT 17
K Per Textfield Methode ausführen AWT, Swing, JavaFX & SWT 6
N Mehrere Tasks nacheinander ausführen AWT, Swing, JavaFX & SWT 7
J Button Event nur einmal ausführen AWT, Swing, JavaFX & SWT 3
S Action Listener in innerer Klasse ausführen. AWT, Swing, JavaFX & SWT 8
N Swing Java Komponente zur Darstellung von klickbaren Links, die Java Funktionen ausführen können AWT, Swing, JavaFX & SWT 2
N JCombobox und Actionlistener Aktion nur ausführen, wenn Useraktion ihn auslöst AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
A Swing Delay (1-4 Sek.) bei JTable und Dialog beim ersten Ausführen AWT, Swing, JavaFX & SWT 3
N Swing nach Fensterrand Action ausführen? HILFE AWT, Swing, JavaFX & SWT 7
A Grafikproblem beim ausführen einer JAR AWT, Swing, JavaFX & SWT 9
H Funktion ausführen wenn Button gedrückt wird. AWT, Swing, JavaFX & SWT 2
Semox Swing JMenuItem-Auswahl mit Aktion ausführen AWT, Swing, JavaFX & SWT 4
H String ausführen und damit weiterarbeiten AWT, Swing, JavaFX & SWT 4
N Swing Projekt - jar ausführen AWT, Swing, JavaFX & SWT 11
S JFrame, beim ausführen passiert nichts AWT, Swing, JavaFX & SWT 3
S Funktion nur ausführen, wenn Maus über Componente ist AWT, Swing, JavaFX & SWT 2
GilbertGrape bei "Enter" Funktion ausführen, egal wo der Fokus AWT, Swing, JavaFX & SWT 2
P System.exit(0); ausführen, wenn letztes Fenster geschlossen AWT, Swing, JavaFX & SWT 10
W Beim Schliessen Aktion ausführen AWT, Swing, JavaFX & SWT 2
V JFrame schließen und Programmzeile(n) ausführen AWT, Swing, JavaFX & SWT 3
J KeyEvent bei JTable mehrmals hintereinander ausführen AWT, Swing, JavaFX & SWT 9
T SWT - Wie Windows erstelltes .jar auf einem MAC ausführen? AWT, Swing, JavaFX & SWT 25
O Abfragen beim öffnen oder danach ausführen? AWT, Swing, JavaFX & SWT 4
G Klasse in Klasse einbinden und ausführen! AWT, Swing, JavaFX & SWT 5
S Class in einer anderen Class ausführen? AWT, Swing, JavaFX & SWT 5
A SWT: Action über Hotkey ausführen AWT, Swing, JavaFX & SWT 2
C ApplicationWindow Shell minimieren (Anderes Event ausführen) AWT, Swing, JavaFX & SWT 4
A Aktion beim anklicken einer Zeile in einer Tabelle ausführen AWT, Swing, JavaFX & SWT 4
C Probleme beim ausführen von Programmen mit Fenstern+Inhalt AWT, Swing, JavaFX & SWT 3
F Action ausführen? AWT, Swing, JavaFX & SWT 3
MDKeil ext. Programm in Java-Fenster ausführen? AWT, Swing, JavaFX & SWT 2
C Problem beim Ausführen von Thread per Button AWT, Swing, JavaFX & SWT 2
F Link aus JEditorPane ausführen AWT, Swing, JavaFX & SWT 2
J Methode die (Graphics g) benötigt von Thread ausführen lass AWT, Swing, JavaFX & SWT 23
H Code nach dem schließen eines Fensters ausführen? AWT, Swing, JavaFX & SWT 3
G Schließen eines Fensters über [X] und Methode ausführen AWT, Swing, JavaFX & SWT 2
R Button actions mit Tastatur ausführen AWT, Swing, JavaFX & SWT 6
D Repaint Funktioniert nicht AWT, Swing, JavaFX & SWT 2
D JUNG Repaint function does not work AWT, Swing, JavaFX & SWT 2
E repaint Probleme AWT, Swing, JavaFX & SWT 13
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
J actionperformed wird nicht aufgerufen/ repaint() AWT, Swing, JavaFX & SWT 6
L Swing repaint() ruft paintComponent(g1d) nicht auf AWT, Swing, JavaFX & SWT 12
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
I Swing Verhindern, dass repaint() kaskadiert AWT, Swing, JavaFX & SWT 6
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
K Methode repaint() AWT, Swing, JavaFX & SWT 1
B Swing Wann brauche ich repaint() ? AWT, Swing, JavaFX & SWT 1
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
A repaint(); AWT, Swing, JavaFX & SWT 9
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
S 2D-Grafik repaint()-Aufruf. Und nichts geschieht. AWT, Swing, JavaFX & SWT 5
Joew0815 JDialog repaint() funktioniert nicht wie gewünscht. AWT, Swing, JavaFX & SWT 2
P JPanel und Repaint AWT, Swing, JavaFX & SWT 5
J JavaFX Automatisches Neuzeichnen ("Repaint") abstellen. AWT, Swing, JavaFX & SWT 10
F JTable Repaint Issue AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
C Repaint() funktioniert nicht in TabbedPanel AWT, Swing, JavaFX & SWT 5
S JList repaint AWT, Swing, JavaFX & SWT 1
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
M Repaint mittels Button richtig aufrufen klappt nicht AWT, Swing, JavaFX & SWT 1
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D repaint() klappt anders als vorgestellt AWT, Swing, JavaFX & SWT 15

Ähnliche Java Themen

Neue Themen


Oben