Überschreiben printComponent

evoc

Mitglied
Hallo ich versuche Gerade Punkte in einem Raster auf einem jPanel in einem JFrame auszugeben. Dies soll nach drücken eines ersten Buttons zunächst die Punkte ausgeben und nach drücken eines 2ten Buttons die zugehörige Route. Ausgabe der Punkte geht auch soweit halbwegs. drücke ich allerdings den 2ten Button blinkt nach kurzer zeit die gewünschte Route auf und verschwindet sofort wieder. Ich habe schon mehrfach gelesen das für eine dauerhaft Darstellung im Panel man die printComponent irgendwie überschreiben muss. Aber irgendwie bekomme ich das als blutiger Java-Anfänger nicht zum funktionieren. Hier mal mein Kode ohne meine verzweifelten Versuche( Die 3 meiner Meinung nach ausschlaggebenden Stellen):

Erster Button und zeichnen der Punkte:
Java:
    private void CreateMouseClicked(java.awt.event.MouseEvent evt) {                                    
       Graphics g = jPanel1.getGraphics();
       test=new TSP(probsize,seed);
       g.setColor(Color.RED);
		for(int i=0;i<test.getKoordX().size();i++){
	int	x= (int) test.getKoordX().get(i);
	int	y= (int) test.getKoordY().get(i);
			g.fillOval(10+10 * (x), 10+10 * (y) ,6,6);
			g.drawString(""+i, 10+10 * (x), 10+10 * (y));
		}
    }

Zweiter Button:
Java:
    private void solveMouseClicked(java.awt.event.MouseEvent evt) {                                   
       getcomboboxen();
       GA main=new GA(probsize,vpopsize,vgenerationGap,vmutationsrate,selektion,rekombination,mutation,vrunmean,fitness,test,"test");
       Chromosom best=new Chromosom(); 
       best = main.getBest();
       List<Integer> lBest= new ArrayList();
       lBest=best.getChromosom();
       distanz.setText(best.getbewertung()+"");
       iterationen.setText(main.getIterationen()+"");
       laufzeit.setText("");
       Graphics g = jPanel1.getGraphics();
       zeichneRoute(lBest,g);
       
    }

Zeichnen der Route:
Java:
private void zeichneRoute(List<Integer> lBest,Graphics g){

        g.setColor(Color.RED);
           	for(int i=0;i<lBest.size()-1;i++){
	int	c1	= lBest.get(i);
	int	x= (int) test.getKoordX().get(c1);
	int	y= (int) test.getKoordY().get(c1);
	
	int	c2 	= lBest.get(i+1); 
	int	xx= (int) test.getKoordX().get(c2);
	int	yy= (int) test.getKoordY().get(c2);
		g.drawLine(10+(x*10),10+(y*10),10+(xx*10),10+(yy*10));
	}
    
}

An welcher stelle müsste ich denn dann printComponent überschreiben und wie. Und ist das überhaupt der richtige Ansatz?? Oder wo finde ich (für Beginner geeignete) gute Hinweise dazu?
Ach so meine Hauptklasse: public class test extends javax.swing.JFrame.
Danke schon mal im Voraus.
Gruß Max
 
Zuletzt bearbeitet:

Gucky

Top Contributor
printComponent müsstest du in einer Klasse überschreiben, die von einer JComponent erbt (JFrame, JPanel sind die häufigsten). Diese paintComponent() Methode wird irgendwann vom Konstruktor aufgerufen, bevor du als Nutzer etwas tun kannst. Du machst also eine Variable Graphics g oben in die Klasse, die du in der überschriebenen paintComponent(Graphics g){this.g = g;) "füllst".
 

Ähnliche Java Themen


Oben