Ich versuche ein einfaches Malwerkzeug zu bauen. Die mouseDrag
-Ereignisse erzeugen eine neue Ellipse und verursachen mein JPanel
auf repaint()
.
Das funktioniert soweit.
Wenn ich jedoch eine Taste (oder eine andere UI-Komponente) drücke, bevor das mouseDrag
-Ereignis zum ersten Mal ausgelöst wird, wird die Schaltfläche in der oberen linken Ecke meines Fensters angezeigt.
Ich habe den Code in dieser Testanwendung isoliert:
%Vor%
Ein Screenshot zum "Sehen" des Problems in meiner Hauptanwendung
+1 bis @ MadProgrammer's Antworten.
super.paintComponent(..)
als ersten Aufruf in Ihrer überschriebenen paintComponent()
haben
JFrame
nicht unnötig setPrefferedSize()
auf, sondern überschreiben Sie getPrefferedSize()
.
Hier ist ein Beispiel, das meine Ratschläge und @ MadProgrammers enthält:
%Vor%
Sie rufen super.paintComponent
nicht an.
Der Grafikkontext, der für einen Malzyklus verwendet wird, wird zwischen allen Komponenten geteilt, die bemalt werden. Das heißt, wenn Sie nicht darauf achten, ihn vor dem Bemalen zu entfernen, werden Sie mit dem, was vor Ihnen gemalt wurde, fertig. p>
Einer der Jobs von paintComponent
ist die Vorbereitung der Grafiken für das Malen
Tags und Links java swing repaint paintcomponent graphics2d