2009-07-29 10 views
3

Utilisation de l'article this de sun. J'essaie de créer une fenêtre transparente.AWTUtilities Transparent JFrame

J'ai une image à l'intérieur d'une étiquette sur le cadre. Je veux que l'image soit visible mais le cadre invisible.

Quand j'utilise


try { 
    Class awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities"); 
    Method mSetWindowOpacity = awtUtilitiesClass.getMethod("setWindowOpacity", Window.class, float.class); 
    mSetWindowOpacity.invoke(null, window, Float.valueOf(0.75f)); 
} catch (NoSuchMethodException ex) { 
    ex.printStackTrace(); 
} catch (SecurityException ex) { 
    ex.printStackTrace(); 
} catch (ClassNotFoundException ex) { 
    ex.printStackTrace(); 
} catch (IllegalAccessException ex) { 
    ex.printStackTrace(); 
} catch (IllegalArgumentException ex) { 
    ex.printStackTrace(); 
} catch (InvocationTargetException ex) { 
    ex.printStackTrace(); 
} 

Il fait everthing est possible de maintenir la transparence des composants non transparents.

Répondre

1

Vous pouvez simplement définir le canal alpha pour la couleur d'arrière-plan de votre cadre, qui ne doit pas descendre vers les composants.

window.setBackground(new Color(1.0, 1.0, 1.0, 0.25)); 

devrait vous donner une fenêtre blanche et transparente.

+1

Merci! Cela fonctionne très bien pour moi ... sur Mac OS X. Cela fonctionne-t-il sur d'autres plateformes? En recherchant des trucs de fenêtre transparents, j'ai trouvé un certain nombre d'articles qui disent que d'autres techniques sont requises sur d'autres plateformes. http://explodingpixels.wordpress.com/2009/06/19/hud-on-windows-finally/ – slothbear

0

Vous devez définir l'opacité des composants de l'enfant, quelque chose comme

childComponent.setOpaque(true); 

qui les rendent opaques, sans le cadre opaque.

1

Vous pouvez toujours utiliser la classe AWTUtilities, mais au lieu de définir l'opacité avec setWindowOpacity() setWindowOpaque(). Cela désactivera l'arrière-plan de la fenêtre, mais tout ce que vous dessinez dans la fenêtre sera toujours dessiné comme avant. Depuis les récentes mises à jour de Java 6, c'est maintenant la bonne façon de faire les choses. AWTUtilities fonctionnera sur les deux Mac & MS Windows. Ces méthodes seront déplacées dans java.awt.Window lui-même dans Java 7.

0

Je voudrais développer une réponse précédente avec ce qui suit. Cela va créer une fenêtre avec une transparence de 0.05 ou 12.75 sur 255. Ensuite, les composants sont configurés avec une transparence de 0.50f cela n'affectera que les composants cliquables. Les éléments non cliquables comme les étiquettes peuvent avoir leur transparence définie sur quoi que ce soit. Cela corrige cependant le problème des composants cliquables en changeant les couleurs.

JWindow subFrame = new JWindow();   
subFrame.setBounds(0, 0, 500, 500); 
subFrame.setAlwaysOnTop(true); 
subFrame.setOpacity(0.50f); 
subFrame.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.05f)); 

JButton button = new JButton("Hello"); 
button.setBounds(20, 180, 100, 40); 

subFrame.getContentPane().setLayout(null); 
subFrame.getContentPane().add(button); 
subFrame.setVisible(true);