Ich habe da ein Java Programm, womit man rechtecke, ovale oder frei zeichnen kann. Man kann Farbe ändern usw..
Mein Problem ist, dass wenn ich die Größe des Fensters verändere oder das fenster in den Hintergrund kommt (indem ich z.B. kurz auf mozilla gehe und dann wieder zurück zu meinem Programm), dann ist die gezeichnete Grafik weg. Wenn ich jedoch dann wieder anfange zu zeichnen, ist die vorher gezeichnete Grafik wieder da. Das soll aber gleich nach dem fenster vergrößern der fall sein. Die Grafik wird mit double buffering gezeichnet.
Ich habe mit einem ComponentListener versucht, dem ganzen zu entgegnen. So habe ich componentResized benutzt und dort einfach das Image neu gezeichnet. Beim vergrößern des Bildes klappt es, auch wenn es flackert. Aber wenn ich das ziehen beende (also die linke maustaste los lasse), dann ist das Bild wieder weg.
Nachdem ich mich etwas informiert habe, glaube ich, dass er nach dem resize entweder die repaint() oder die paintComponent(Graphics g) methode aufruft. Diese rufen dann die update() methode auf, die das ganze bild löscht (mit einem rechteck der hintergrundfarbe füllt). So habe ich versucht, diese Methoden zu überschreiben, wofür ich eine eigene Klasse erstellt habe:
Es ist mir absolut bewusst, dass System.out.print() nicht dazu führt, mein bild neu zu zeichnen ^^ es soll nur ein test sein, ob es funktioniert, wenn ich das fenster vergrößere, bzw wenn das bild verschwindet. Tut es aber nicht.
Weiteres zu meinem Programm: Ich habe ein Container, mit einem BorderLayout. Oben Panel1, wo die Buttons und auswahlfunktionen vorhanden sind. Unten Panel2, wo sich das zeichenfeld befindet. Den ganzen code werde ich nicht reinschreiben, da alle klassen zusammen etwas über 1100 zeilen besitzen.
Wie kriege ich das hin? HILFEEEEEEE.......
Mein Problem ist, dass wenn ich die Größe des Fensters verändere oder das fenster in den Hintergrund kommt (indem ich z.B. kurz auf mozilla gehe und dann wieder zurück zu meinem Programm), dann ist die gezeichnete Grafik weg. Wenn ich jedoch dann wieder anfange zu zeichnen, ist die vorher gezeichnete Grafik wieder da. Das soll aber gleich nach dem fenster vergrößern der fall sein. Die Grafik wird mit double buffering gezeichnet.
Ich habe mit einem ComponentListener versucht, dem ganzen zu entgegnen. So habe ich componentResized benutzt und dort einfach das Image neu gezeichnet. Beim vergrößern des Bildes klappt es, auch wenn es flackert. Aber wenn ich das ziehen beende (also die linke maustaste los lasse), dann ist das Bild wieder weg.
Nachdem ich mich etwas informiert habe, glaube ich, dass er nach dem resize entweder die repaint() oder die paintComponent(Graphics g) methode aufruft. Diese rufen dann die update() methode auf, die das ganze bild löscht (mit einem rechteck der hintergrundfarbe füllt). So habe ich versucht, diese Methoden zu überschreiben, wofür ich eine eigene Klasse erstellt habe:
Code:
class DrawPanel extends JComponent
{
@Override
public void update( Graphics g ){
System.out.print("upd");
}
@Override
public void repaint() {
System.out.print("repaint");
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent( g );
System.out.print("PC");
}
}
Es ist mir absolut bewusst, dass System.out.print() nicht dazu führt, mein bild neu zu zeichnen ^^ es soll nur ein test sein, ob es funktioniert, wenn ich das fenster vergrößere, bzw wenn das bild verschwindet. Tut es aber nicht.
Weiteres zu meinem Programm: Ich habe ein Container, mit einem BorderLayout. Oben Panel1, wo die Buttons und auswahlfunktionen vorhanden sind. Unten Panel2, wo sich das zeichenfeld befindet. Den ganzen code werde ich nicht reinschreiben, da alle klassen zusammen etwas über 1100 zeilen besitzen.
Wie kriege ich das hin? HILFEEEEEEE.......