tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
26
ZUGRIFFE
1264
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    mjkraus mjkraus ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    29
    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)
     

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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ß

    Sascha
    mjkraus bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  3. #3
    mjkraus mjkraus ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    29
    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!
    Angehängte Grafiken Angehängte Grafiken  
     

  4. #4
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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ß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  5. #5
    mjkraus mjkraus ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    29
    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)
     

  6. #6
    mjkraus mjkraus ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    29
    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!
     

  7. #7
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Was genau möchtest du denn erreichen?

    Gruß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  8. #8
    mjkraus mjkraus ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    29
    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.
     

  9. #9
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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ß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  10. #10
    mjkraus mjkraus ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    29
    Genau, ich möchte alles gezeichnete innerhalb der selben Komponent (in der es gezeichnet wurde) entfernen.
     

  11. #11
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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ß

    Sascha
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  12. #12
    SE Tutorials.de Gastzugang
    painChildren ... das klingt schmerzvoll xD
     

  13. #13
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Da hatte sich glatt das t aus dem Staub gemacht.
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  14. #14
    mjkraus mjkraus ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    29
    Zitat Zitat von mjkraus Beitrag anzeigen
    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?
    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?
     

  15. #15
    mjkraus mjkraus ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    29
    Kann mir keiner helfen?
     

Ähnliche Themen

  1. Modifizierte JComponent und LayoutManager
    Von SCIPIO-AEMILIANUS im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 5
    Letzter Beitrag: 28.12.10, 19:19
  2. JComponent in JPanel frei bewegen
    Von karl_soost im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 20.08.10, 10:00
  3. jComponent Size
    Von lun27 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 03.08.08, 22:48
  4. JPanel und JComponent - Zeichnen
    Von CerebrosuS im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 0
    Letzter Beitrag: 11.10.07, 17:43
  5. Sliding effect von JComponent
    Von Romsl im Forum Java
    Antworten: 2
    Letzter Beitrag: 13.07.06, 21:44

Stichworte