Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [SWING] Pannello a sfondo trasparente con swing

    Ciao a tutti.
    Non sono molto esperto di interfacce grafiche java e volevo provare a realizzare un semplice pannello che abbia come backgrond un'immagine png e che quindi sia "trasparente" nei punti dove vi è la trasparenza nella png.

    L'immagine qui sotto dovrebbe rendere l'idea:

    [img=http://img4.imageshack.us/img4/7421/provabeq.th.jpg]

    Ho cercato un po' su web e ho trovato diverse soluzioni per rendere trasparente un pannello.
    Nessuna di queste ha funzionato.
    Molti dicono di usare
    codice:
    Color c=new Color(200,0,0,5);
    setBackground(c);
    setOpaque(true);
    Il 4 parametro di "Color()" è appunto il canale alpha. Se diminuisce aumenta la trasparenza del colore certo ma non quella del pannello. Se infatti (200, 0,0,200) è rosso scuro, (200,0,0,0) è grigio in quanto il colore diventa trasparente e si vede il grigio "standard(?)" del pannello.

    Insomma esiste un modo?
    Grazie a tutti!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [SWING] Pannello a sfondo trasparente con swing

    Originariamente inviato da Swalke
    Non sono molto esperto di interfacce grafiche java e volevo provare a realizzare un semplice pannello che abbia come backgrond un'immagine png e che quindi sia "trasparente" nei punti dove vi è la trasparenza nella png.
    Chiariamo un pochino .... la immagine mostra che sotto la macchia rosa c'è direttamente il desktop del tuo sistema operativo.
    Tu parli di "pannello" e se intendi JPanel (?), chiaramente non si può fare .... ma semplicemente perché un JPanel non è una finestra "top-level"! (come Window/Frame/Dialog di AWT o JWindow/JFrame/JDialog di Swing).

    Quindi se vuoi che la tua applicazione Java mostri una finestra che sia translucente e/o sagomata in modo da mostrare il desktop .... allora devi pensare in termini di una delle 6 classi che ho citato!

    Si può fare qualcosa ma non ti aspettare di farla in modo del tutto "pulito" e portabile.

    Ricorrendo a dei trucchetti con uno screenshot, vedi l'articolo: Hacking Swing: Translucent Windows

    Usando una classe non documentata (e nota, solo da Java SE 6u10), vedi l'articolo: How to Create Translucent and Shaped Windows.

    Vedi anche gli articoli:
    - Translucent and Shaped Swing Windows
    - Translucent and shaped windows in core Java
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie mille per l'aiuto e per la chiarezza.
    In effetti quella che hai linkcato sembra l'unica soluzione.
    Solo che di fatto non si ottiene una finestra veramente trasparente (non si può agire sugli oggetti sottostanti che si vedono).

    Quindi in java mi sa che non c'è via d'uscita
    Grazie mille!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Swalke
    Solo che di fatto non si ottiene una finestra veramente trasparente (non si può agire sugli oggetti sottostanti che si vedono).
    Se usi il barbatrucco dello "screenshot" sottostante ovviamente non è una "vera" trasparenza.
    Se invece usi la classe non ufficiale AWTUtilities (vedi secondo link), allora la finestra può davvero diventare translucente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.