2011-09-08 13 views
7

En relación con esta pregunta: ¿ Is The Java Tutorials Translucent Window example giving trouble to those playing with jdk7?¿Es posible tener ventanas translúcidas en java 7 incluyendo una barra de título?

con jdk1.6.0_26 parezco ser capaz de aplicar transparencia a un JFrame, pero no así con jre7:

NativeException: java.awt.IllegalComponentStateException: El marco está decorado

ex (jruby java script, trabaja con jdk1.6 no JDK7 sin embargo):

 

require 'java' 

class MouseDraw 

    def self.go 
    java_import 'javax.swing.JFrame' 
    java_import 'com.sun.awt.AWTUtilities' 

    f = JFrame.new 
    AWTUtilities.set_window_opacity(f, 0.5) 
    f.set_size 200,200 
    f.show 
    end 

end 
MouseDraw.go 

Así que mi pregunta es "¿es posible tener una barra de título translúcida en JDK7" (me gustaría una ventana transparente que estoy creando para ser arrastrable/tamaño variable)

Respuesta

8

Java 7 introducido Window.setOpacity() hacer lo que la clase no oficial AWTUtilities hizo en Java 6.

Por desgracia, es documentado no trabajar con ventanas decoradas:

las siguientes condiciones deben cumplirse con el fin de establecer el valor de opacidad de menos de 1.0f:

(El énfasis es mío)

+3

desafortunado, es un cambio de comportamiento que rompe el código existente ... – kleopatra

+0

@kleopatra: pero eso es lo que se inscribió cuando API no oficial utilizada: Las 'AWTUtilities' no están definidas en Java SE y el nuevo método no rompe la compatibilidad con ningún método público previamente definido. –

+1

técnicamente, está bien, también técnicamente, no lo hice: en su lugar utilicé AWTUtilitiesWrapper, que era una vista previa medio oficial de la funcionalidad futura (y se publicitó como bastante segura ;-) – kleopatra

2

fascinante, si se agrega

JFrame.setDefaultLookAndFeelDecorated(true); 

Luego le permite tener un archivo arrastrable, con la barra de título JFrame (solo usa el aspecto y tacto feos de Java).

ref: Pass mouse events to applications behind from a Java UI

Ahora que es raro.

También tenga en cuenta que puede "falso" el comportamiento de edad utilizando la transparencia por píxel, consulte http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

para que pueda tener el comportamiento anterior, tanto en Java 6 y 7, pero usted tendría que caso especial del código alrededor de él y hacerlo de una manera para uno, de una manera para el otro, posiblemente ...

Cuestiones relacionadas