-
Hallo!
Ich würde gerne einen JComponent (inklusive aller möglicherweise darin enthaltener Komponenten) aus- und einfaden. Wie kann ich das bewerkstelligen? Ich dachte mir eventuell über die Funktion paintComponent(). Aber wie?
Thx!Geändert von mjkraus (29.06.11 um 19:39 Uhr)
-
Hallo,
wenn du die komplette Component ausfaden möchtest, darfst du nicht die paintComponent() nehmen. Diese Methode ist nur für die Komponente selbst da und nicht für die Childs oder die Border. Sonst müsstest du paintChild und paintBorder auch noch überschreiben.
Hier kannst du jetzt einfach die paint()-Methode überschreiben.
Bei Fade wird ja eine Komponente vom unsichtbar langsam sichtbar, bzw von transparent langsam nicht mehr transparent und umgekehrt.
Das kannst du über das AlphaComposite lösen.
Hier ist ein Beispiel wie man eine Component halb-transparent zeichnet.
Code java:1 2 3 4 5
Graphics2D g2d = (Graphics2D)g; g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER), 0.5f); super.paint(g2d); g2d.dispose();
Wenn du ein Fading hinbekommen möchtest, musst du den Alphawert ändern (0.5f im Beispiel).
Also du müsstest einen Thread starten, der in der den Alpha-Wert hochzählt zu 1 wenn die Component sichtbar werden soll und zu 0 wenn sie unsichtbar werden soll. Dementsprechend muss du vorher bzw nachher die setVisible-Methode aufrufen.
Diesen Thread darfst du aber nicht in der paint-Methode haben, sondern du solltest den Wert über Getter- und Setter setzen und dann vielleicht eine Methode schreiben setFadeVisible(boolean).
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Hallo!
vielen Dank für die Antwort, ich hab es auch gleich ausprobiert. Leider habe ich ein kleines Problem festgestellt: Wenn ich auf das Graphics- bzw. Graphics2D-Objekt zeichne wird alles einzeln transparent übereinander gelegt (siehe Anhang links). Allerdings möchte ich, dass beim Faden alles komplett einmal transparent wird (siehe Anhang rechts). Ich hoffe ich habe mich verständlich ausgedrückt.
Thx!
-
Ich weiß schon was du möchtest. Für Fading einer JComponent kannst du das so machen, sowas dauert normal nur so ca 0.3 - 0.5 sek. Habe ich öfter schon so gelöst.
Wenn du mehr Zeit bräuchtest, wäre meine Idee, dass du die Component erstmal alles auf ein BufferedImage zeichnest. Die Component entfernst, das Image darstellt und dieses auf die gleiche Art verschwinden lässt.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Stimmt! Für die kürzeren Fades nehme ich dann die Lösung aus Post 2 her.
Für die größeren Fades könnte ich da folgendes machen: Das ganze würde ich auf ein BufferedImage zeichnen, die enthaltenen Components entfernen und in einer Variablen zwischenparken, das Graphics-Objekt durch das des BufferedImages ersetzen (da stellt sich die Frage wie kann ich das Ersetzen bewerkstelligen?) und dann die Komponente ausfaden (Für einfaden das ganze dann umgekert). Ist das so überhaupt realistisch?Geändert von mjkraus (01.07.11 um 01:29 Uhr)
-
Hallo,
ich hab mal etwas rumgespielt: Leider hat sich ein kleines Problem ergeben! Ich schaff es nicht das Graphics-Objekt komplett Tranparent zu löschen, diese beiden Möglichkeiten führen beide zu einer komlett schwarzen Fläche:
Code java:1 2 3
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC)); g2d.setColor(new Color(255, 255, 255, 0)); g2d.fillRect(0, 0, 100, 100);
Code java:1 2
g2d.setBackground(new Color(255, 255, 255, 0)); g2d.clearRect(0, 0, 100, 100);
Was mache ich falsch?
Thx!
-
Was genau möchtest du denn erreichen?
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Ich möchte das Graphics-Objekt komplett leeren, so dass es überall 100% transparent und mit keiner Farbe gefüllt ist. Mit beiden genannten Möglichkeiten ist die Fläche nachher komplett schwarz.
-
Welchen Effekt möchtest du denn erzielen? Möchtest du, dass alles was dort gezeichnet wurde, entfernt wird? Versuchst du es in der gleichen Komponente zu entfernen, in der es gezeichnet wurde?
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Genau, ich möchte alles gezeichnete innerhalb der selben Komponent (in der es gezeichnet wurde) entfernen.
-
Wenn du die Komponente neu zeichnest und du verhindest, dass die Children gezeichnet werden, hast du den Effekt den du möchtest. Dazu musst du den bereich nicht "clearn".
Dazu könntest du die Methode paintChildren überschreiben.
Was genau hast du denn vor?
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
02.07.11 14:43 #12SE Tutorials.de Gastzugang
painChildren ... das klingt schmerzvoll xD
-
Da hatte sich glatt das t aus dem Staub gemacht.
Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Bei der Ersetzung des Graphics-Objekt der Komponente mit dem des BufferedImages hätte ich zuerst das Graphics-Objekt geleert (was ja leider nicht so funktioniert wie es soll) und dann das Image mit der aktuellen Transparenz des Fading-Prozesses gezeichnet.
Wie kann ich dann statt die Childrens zu entfernen die von Dir angesprochene paintChildren()-Methode verwenden?
-
Kann mir keiner helfen?
Ähnliche Themen
-
Modifizierte JComponent und LayoutManager
Von SCIPIO-AEMILIANUS im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 5Letzter Beitrag: 28.12.10, 19:19 -
JComponent in JPanel frei bewegen
Von karl_soost im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 4Letzter Beitrag: 20.08.10, 10:00 -
jComponent Size
Von lun27 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 03.08.08, 22:48 -
JPanel und JComponent - Zeichnen
Von CerebrosuS im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 11.10.07, 17:43 -
Sliding effect von JComponent
Von Romsl im Forum JavaAntworten: 2Letzter Beitrag: 13.07.06, 21:44



2Danke

Zitieren


Login





