PDA

View Full Version : [JAVA] Pannello a sfondo trasparente con swing


Swalke
09-05-2009, 12:08
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] (http://img4.imageshack.us/my.php?image=provabeq.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
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!

||ElChE||88
09-05-2009, 12:46
Non conosco molto Swing, ma non è che il grigio è di qualche componente al di sotto del pannello? Tipo una JFrame...

PGI-Bis
09-05-2009, 21:05
Se vuoi un pannello trasparente con un'immagine di sfondo puoi usare un JLabel al posto di JPanel (ogni JComponent è un Container) oppure crei una sottoclasse di JPanel e ridefinisci il metodo paintComponent in modo da disegnare un'immagine sullo sfondo. Se vuoi una finestra trasparente bisogna aspettare Java 7.

Swalke
13-05-2009, 00:27
La seconda che hai detto!

Veramente java 7 permetterà le finestre trasparenti?
Del tipo che se sotto la mia finestra vedo l'icona di una directory, posso agire su di essa?

PGI-Bis
13-05-2009, 00:40
Sì per trasparenza, per via del supporto a JavaFX, sempre che Oracle non pensi il contrario. La libreria esiste già in Java 6 ma è una "sun", quindi se ci scrivi un programma sopra rischi di restare in mutande al primo aggiornamento dell'ambiente Java (detta in termini tecnici).

No per l'interazione con cose che stanno sotto alla finestra trasparente. E' sempre un rettangolo, solo che alcune parti non si vedono. L'interazione con quel che c'è sotto è comunque impedita dalla presenza della finestra.

Forse :D.