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");
 
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
 
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.
 
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 😉
 
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]
 
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:
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.
 
Nein, du kannst nicht verhindern dass paintComponent oft aufgerufen wird. Warum ist es denn eigentlich nen Problem dass das öfter aufgerufen wird?
 

Neue Themen


Zurück
Oben