Ungewollte mehrmalige ausführung des codes

bluue

Mitglied
Hallo

kann mir bitte jemand sagen warum dieser code 3 mal hintereinander ausgeführt wird und wie ich das verhindern kann ?


Java:
package sudoku;

import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.TextField;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

public class game {
	JFrame fsudoku = new JFrame();
	
	
	public game()
	{
//		button b = new button();
		paint p = new paint();
		fsudoku.setLayout(new BorderLayout());
//		fsudoku.add(b, BorderLayout.SOUTH);
		fsudoku.add(p, BorderLayout.CENTER);
		fsudoku.setSize(410,460);
		fsudoku.setLocation(200,200);
		fsudoku.setVisible(true);
		fsudoku.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	
	}



	
	public static void main(String[] args){
		
		new game();
		
	}

}


Java:
package sudoku;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.print.DocFlavor.STRING;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class paint extends JPanel {



	public void paintComponent(Graphics g) {
		
		this.setLayout(null);
		
		
		
		
//	SPIELFELD---------------------------------------------------------------------------------------------------------
		Graphics2D g2 = (Graphics2D) g;	

		g2.setStroke(new BasicStroke(3));
		g2.setColor(Color.black);
		
		 
		//					breite	länge
		g2.drawRect(15, 15, 360, 360);
		

		//vertical
		g2.drawLine(135, 15, 135, 375);
		g2.drawLine(255, 15, 255, 375);
		//horizontal
		g2.drawLine(15, 135, 375, 135);
		g2.drawLine(15, 255, 375, 255);	
	
		
		g2.setStroke(new BasicStroke(1));				
		int line = 55;
		
		for ( int i = 1; i < 9; i++)
		{
			//vertical
			g2.drawLine(line, 15, line, 375);
			//horizontal
			g2.drawLine(15, line, 375, line);
			line = line + 40;		
		};
		System.out.println("test");
 

bluue

Mitglied
also in der console steht beim ausführen 3 mal test
test lasse ich von system.out.println ausgeben

das fenster wird jedoch nur einmal geöffnet
 

tribalup

Bekanntes Mitglied
Das liegt einfach daran das dein JPanel (deine paint Klasse) während der Ausführung dreimal neugezeichnet wird.
Du überschreibst die paintComponent und diese wird bei jeder Neuzeichnung aufgerufen.
setLocation() erzwingt beispielsweise ein Neuzeichnen.
 

Athena

Mitglied
Der Code funktioniert bei mir. Wenn du die mehrfache Ausgabe von "test" meinst, das liegt daran, dass das Panel mehrmals neugezeichnet wird. Übrigens hast du ein ";" zuviel nach der for-schleife.


Edit: Schade ich bin zu langsam ;)
 
S

Spacerat

Gast
Wie oft das paint beim öffnen des Fensters gezeichnet wird hängt nicht davon ab, wie oft es geöffnet wird, sondern davon wie oft es dabei "invalid" (z.B. durch das Setzen eines Layouts) wird.
[EDIT]@Athena: ...und ich erst... XD[/EDIT]
 

Network

Top Contributor
Mit anderen Worten: Starte dein Programm, dann ziehe dein Programm größer/kleiner/maximieren/minimieren und schau auf die Konsole was passiert.

Es wird bei jeder Fensterveränderung "test" in die Konsole geschrieben, weil es jedesmal neugezeichnet werden muss wenn es sich verändert. Das OS entscheidet wann dein Fenster neugezeichnet werden muss/nicht mehr aktuell ist btw., du hast also keinen direkten Einfluss darauf.

Das repaint kann auch ausgelöst werden durch das verändern anderer GUI's.
 
Zuletzt bearbeitet:

tribalup

Bekanntes Mitglied
Also gegen das neuzeichnen kannst du nichts machen.
Versteh grad auch nicht wo das Problem ist.
Erklär mal bitte warum nicht neugezeichnet werden soll.
 
G

Gast2

Gast
Nein, du kannst nicht verhindern dass paintComponent oft aufgerufen wird. Warum ist es denn eigentlich nen Problem dass das öfter aufgerufen wird?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Ungewollte Manipulation eines Objekts Allgemeine Java-Themen 2
Zrebna Ausführung einer Testmethode in der IDE erfolgreich - failt aber via 'mvn test' Allgemeine Java-Themen 5
J Fehlermeldung bei Ausführung von .jar-Datei Allgemeine Java-Themen 9
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
M Webservice timeout bei Ausführung der .jar Allgemeine Java-Themen 3
L Fehler bei der Ausführung einer Jar Allgemeine Java-Themen 2
S Fehlermeldungen erscheinen erst in der Ausführung des Programms Allgemeine Java-Themen 11
A einmalige Ausführung eines Methodenabschnittes Allgemeine Java-Themen 3
E Threads Ausführung in Threads ist langsamer als ohne Threads Allgemeine Java-Themen 13
H Plattformunabhänginge Ausführung einer .jar Datei Allgemeine Java-Themen 8
R Internetverbindung weg bei ausführung Allgemeine Java-Themen 3
W Deserialisierung und Ausführung Allgemeine Java-Themen 2
X Prozess-Objekt nach Ausführung der destroy-Methode null oder nicht null ? Allgemeine Java-Themen 10
J Wie die gleichzeitige Ausführung mehrerer Tasks trotz Multithreading verhindern? Allgemeine Java-Themen 2
Daniel_L Mehrfache Ausführung desselben Threads/Tasks verhindern? Allgemeine Java-Themen 4
V Parallele Ausführung Allgemeine Java-Themen 8
D Eclipse-build vs. Jar-Ausführung Allgemeine Java-Themen 3
V Ausführung Client- oder Serverseitig? Allgemeine Java-Themen 13
I Thread eine bestimmte Zeit zur Ausführung geben Allgemeine Java-Themen 2
R ClientHTTPRequest - bei mehrfacher Ausführung? Allgemeine Java-Themen 2
K Richtige JVM für jar Ausführung? Allgemeine Java-Themen 4
F JAR-Datei-Ausführung löst Fehler aus Allgemeine Java-Themen 5

Ähnliche Java Themen


Oben