2010-07-30 6 views
4

Je viens de rencontrer les utilitaires (com.sun.awt.AWTUtilities) pour rendre votre JFrame vraiment transparent. Documentation here. Cela fonctionne très bien. Même sous Linux avec les effets de bureau avec les fenêtres bancales allumées (Here a little video)! Mais je veux faire aussi un composant non transparent sur le JFrame transparent.Java: Fenêtres transparentes avec des composants non transparents?

Est-ce que quelqu'un sait, si c'est possible, comment?

Voici le code je:

import com.sun.awt.AWTUtilities; 

/* "this" is the JFrame */ 
this.setUndecorated(true); 
AWTUtilities.setWindowOpaque(this, true); 
AWTUtilities.setWindowOpacity(this, 0.5f); 
AWTUtilities.setWindowShape(this, new RoundRectangle2D.Float(0f, 0f, (float) getWidth(), (float) getHeight(), 15f, 15f)); 

Merci

Répondre

4

IIUC, Translucent Windows applique à l'ensemble java.awt.Window et son contenu, mais vous pouvez essayer l'approche ci-dessous et dans ce example.

JFrame f = new JFrame(); 
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
f.setBackground(new Color(0f, 0f, 0f, 0.1f)); 
f.setUndecorated(true); 
f.add(new JLabel("<html>Testing<br>1, 2, 3</html>")); 
f.pack(); 
f.setLocationRelativeTo(null); 
f.setVisible(true); 
+0

Cela ne fonctionne pas sous Linux ... Sur Mac, c'est la solution à mon problème ... Triste ... –

+1

@Martijn Courteaux: Et bien, la démo 'AWTUtilities':" Notez que les effets peut ne pas être supporté par la plateforme sous-jacente ... " – trashgod

1

Qu'est-ce que vous voulez faire est setWindowOpaque à false et dessiner l'arrière-plan avec une faible alpha (ou alpha 0 si vous voulez une transparence complète). Les composants seront toujours dessinés opaques. Voir this article et regarder translucidité par pixel.

Questions connexes