Problem mit Graphics
-
Ich versuche aus einer Klasse mittels eines Graphics Objekts auf einem JPanel zu zeichnen. Diese Klasse ist nicht von Component abgeleitet sonder bekommt den Graphics Kontext des Panels über einen Konstruktor übergeben.
Nun habe ich folgendes Problem, zeichne ich über das Graphics Object auf dem JPanel klappt es manchmal ohne Probleme, dann wieder nicht. Das was mich besonders wundert ist, versuche ich mit
graphics.fillRect(0,0, 500,500);
Zeichnet er manchmal nur noch einen Teil mit diesem Rect neu und zwar die rechte untere Ecke, wo durch zufall vorher ein Dialog war! Mir kommt es so vor, als ob nicht das gesamte Panel neu gezeichnet wird.
Jetzt kommt der Knaller, unter Linux funktioniert es problemlos! Es muss imho irgendetwas mit dem neuzeichnen des Panels unter Windows zu tun haben. Gibt es dort typische Fehler in die man tappen kann?
Bin für jede Hilfe sehr dankbar!
PS: Unter 1.4.2 und 1.5 gleiches Verhalten
PPS: Ich habe auch schon in der anderen nicht nur den Graphics Kontext übergeben, sondern auch mal das gesamte Panel und dann update(graphics) ausprobiert, mit dem gleichen Misserfolg!
-
poste mal etwas mehr code bitte. vielleicht fällt dann wem was ein.
-
Ich konnte dieses Problem gerade noch ein wenig eingrenzen! Es ist sehr komisch!
Ich schrieb doch, dass nur der Teil des Panels repainted wird, wo kurz davor ein JDialog war. Daraufhin habe ich meine Anwendung in die rechte untere Bildschirmecke verschoben und aus dem JDialog das setLocationRelativeTo(JFrame) rausgenommen. Dadurch öffnet sich jetzt der JDialog nicht mehr auf dem JPanel sondern links oben auf dem Bildschirm und das Neuzeichnen des Panels klappt!?! Daraufhin in meinem Source zwischen dem Aufruf des JDialogs und der Klasse welche auf dem Panel zeichnet einen repaint() Aufruf eingefügt und es funktioniert weiterhin.
Setze ich nun aber wieder in dem Dialog setLocationRelativeTo(JFrame) tritt das alte Problem auf. Aber wie schon gesagt, nur uter Windows.
DocJunioR schrieb:
poste mal etwas mehr code bitte. vielleicht fällt dann wem was ein.
Das Problem ist, dass es sehr sehr viel Code über viele Klassen verteilt ist. Aer der reine Zeichencode beschränkt sich auf graphics.drawRecht Aufrufe. Der Code scheint auch sonst fehlerfrei zu laufen(Linux), nur das Neuzeichnen/Updaten unter Windows scheint sich anders zu Verhalten.
-
Das Schließen des Dialogs bedingt zwar einen repaint des JFrame, aber nicht notwendigerweise einen paint der Kindelemente des Frame. Hier werden aus Performancegründen nur die Teilbereiche neu gezeichnet, die verdeckt waren. Evtl. solltest du nach dem Schließen des JDialog dediziert einen Aufruf der Zeichnungsobjekte machen.
-
Danke, dass habe ich auch gemacht und das funktioniert nun zu 85% aller Versuche. Ich habe die selbe Anwendung einem Bekannten per Mail gesendet und auf seinem XP läuft das angeblich fehlerfrei.
Momentan tippe ich darauf das mein Windows-XP irgendwelche Window-Messages anders schickt. Es läuft halt auf Linux-AMD64, Linux-x86 und angeblich auf dem XP von nem Freund. Aber warum ausgerechnet auf meinem Windows nicht, mit genau diesem komischen Fehler, sowohl unter 1.4.2 als auch 1.5?
Hat von Euch schon mal einer von solchen Problemen gehört?
Danke für die Mühen!
-
Ich hab' jetzt nur halbherzig gelesen (*zugeb*), aber Dein Problem ist, daß Java-Kram nicht sauber gezeichnet wird unter Windows?!
Ich hatte auch mal ein deratiges Problem. Hing mit DirectX zusammen. Du konntest irgendwie was übergeben von wegen "java -x:directdraw=no Programm" oder so ähnlich, dann funzte es. Vielleicht suchst Du mal danach. Hatte die letzte DX Version (9.0c). Nach einer Win-Neu-Install. (ebenfalls DX 9.0c) war das Problem weg.