paintComponent zeichnet andere Komponenten über meine Zeichnung

8

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

    
Reini 13.11.2012, 09:58
quelle

2 Antworten

8

+1 bis @ MadProgrammer's Antworten.

  • Sie sollten super.paintComponent(..) als ersten Aufruf in Ihrer überschriebenen paintComponent() haben
  • Verlängern Sie JFrame nicht unnötig
  • Erstellen und Minipulieren von Swing-Komponenten über EDT
  • Rufen Sie nicht setPrefferedSize() auf, sondern überschreiben Sie getPrefferedSize() .

Hier ist ein Beispiel, das meine Ratschläge und @ MadProgrammers enthält:

%Vor%     
David Kroukamp 13.11.2012, 10:41
quelle
7

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

    
MadProgrammer 13.11.2012 10:19
quelle