Java Repaint - JComponet muss die Klasse neu streichen, wenn die Repaint () von einer anderen Klasse aufgerufen wird

StackOverflow https://stackoverflow.com//questions/20025881

Frage

Ich versuche immer noch, eine Repaint-Methode zu erhalten, um in einer separaten Klasse mit einer Klasse zu arbeiten, die den Junkonent erweitert.Ich habe hier ein paar Post aufgegeben und bisher habe ich den Code nicht dazu bringen, zu arbeiten.Ich habe einen guten Rat bekommen.Ich platziere unten, was ich bisher habe.

Hauptklasse 1:

generasacodicetagpre.

Klasse 2:

generasacodicetagpre.

Klasse 3: (Ich hatte diese eingebettet in die gleichen Dateien wie die Klasse oben - es ist separat, wenn ich den fertigen Code habe)

generasacodicetagpre.

fromme, was ich gelesen habe und was die Leute das geschrieben haben, sollte funktionieren.Gibt es eine Möglichkeit, es sofort zu malen.Repaint () hat manchmal etwas Verzögerung.Ich möchte dies als Beginn eines Spiels nutzen, und ich muss in der Lage sein, eine Arraylist von Kreisen zu erstellen und sie sofort neu zu stecken. Derzeit zeichnet dies nur einen Kreis in den Top-Koordinaten (0,0).

doug deisen hauf

War es hilfreich?

Lösung

Gibt es eine Möglichkeit, ihn sofort zu leiten.

Es wird sofort lackieren, sobald die GUI sichtbar ist. Es gibt nichts Besonderes, was Sie tun müssen. Es ist kein Bedarf an einer SetDraw () -Methode erforderlich. Alle Komponenten werden automatisch lackiert, wenn die GUI angezeigt wird.

generasacodicetagpre.

Dieser Code tut nichts. Die GUI ist noch nicht sichtbar, also gibt es nichts zu malen. Es gibt keinen Grund, dass Sie eine Repaint aufrufen, es sei denn, Sie ändern tatsächlich eine Eigenschaft einer Komponente auf einer sichtbaren GUI.

generasacodicetagpre.

Es gibt keinen Grund, eine Methode zu erstellen, die einfach eine Repaint () macht, um diese Methode loszuwerden. Das ist nicht das, was ich in deinem letzten Beitrag vorgeschlagen habe. Ich sagte, Sie erstellen eine Methode, um eine Eigenschaft zu ändern, die das Ergebnis des Gemäldes der Komponente beeinträchtigt.

Ich habe Ihnen ein Beispiel gegeben, als wenn Sie SETFOREGROUGE () verwenden, ändert das Verfahren die Farbe des zu lackierenden Textes, so dass Repaint () automatisch aufgerufen wird, wenn die Farbe geändert wird.

beseitigen Sie den gesamten komplexen Painting-Code in Ihrer Paint-Komponente und versuchen Sie, einfach zu tun

generasacodicetagpre.

Spielen Sie nicht mit Rotationen und Clips (selbst ich habe Probleme mit diesen Konzepten und wenn nicht richtig gemacht, erhalten Sie möglicherweise nichts lackiertes), bis Sie etwas Grundarbeiten erhalten. Sobald Sie dieses Arbeiten bekommen, tun Sie einmal etwas komplizierteres, einen Schritt gleicher, bis Sie die Grundlagen verstehen. Schreiben Sie kein komplexes Programm, bis Sie etwas einfaches Arbeiten bekommen.

Ich weiß auch nicht, warum Sie versuchen, aus einem gepufferten Bild zu zeichnen. Zeichnen Sie einfach mit dem Grafikobjekt, das in das Paintcomponent () -Methode übergeben wird. Es ist nicht erforderlich, ein PufferedImage zu verwenden, Swing ist bereits doppelt gepuffert, sodass Sie nur Ihren Code komplizieren.

Haben Sie das benutzerdefinierte Malerei Tutorial schon? Es enthält ein Arbeitsbeispiel.

edit:

Mit all den oben genannten Punkten haben Sie noch zwei grundlegende Probleme:

    .
  1. Sie fügen das Bauteil nicht dem Panel hinzu
  2. Die Komponente hat keine bevorzugte Größe, also gibt es nichts zu malen. Sie müssen die Methode von GetPrefErFeRedSize () überschreiben, um eine angemessene Größe für die Komponente zurückzugeben, die Sie malen möchten.
  3. Sogar diese beiden Fixes lösen das Problem Ihrer komplexen Malerei nicht, aber zumindest jetzt kann ich ein einfaches Kordelzug (...) zur Arbeit bringen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top