2011-09-08 13 views
7

correlati a questa domanda: Is The Java Tutorials Translucent Window example giving trouble to those playing with jdk7?È possibile avere una finestra traslucida in java 7, inclusa una barra del titolo?

con jdk1.6.0_26 mi sembra di essere in grado di applicare traslucenza a un JFrame, ma non così con jre7:

NativeException: java.awt.IllegalComponentStateException: Il telaio è decorato

ex (JRuby scripting Java, funziona jdk1.6 non con jdk7 però):

 

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 

Quindi la mia domanda è: "è possibile avere una barra del titolo traslucido in jdk7" (vorrei una finestra trasparente Sto creando essere trascinabili/ridimensionabile)

risposta

8

Java 7 introdotto Window.setOpacity() a fare ciò che la classe non ufficiale AWTUtilities ha fatto in Java 6.

purtroppo è non documentato lavorare con finestre decorate:

le seguenti condizioni devono essere soddisfatte al fine di impostare il valore di opacità inferiore 1.0f:

(enfasi mia)

+3

sfortunatamente, è un cambio di comportamento che spezza il codice esistente ... – kleopatra

+0

@kleopatra: ma questo è quello che ti sei iscritto quando API non ufficiale usata: le 'AWTUtilities' non sono definite in Java SE e il nuovo metodo non rompe la compatibilità con qualsiasi metodo pubblico precedentemente definito. –

+1

tecnicamente, hai ragione, anche tecnicamente, non l'ho fatto: usavo invece AWTUtilitiesWrapper che era un'anteprima semiprincipale della nuova funzionalità (e pubblicizzato come piuttosto sicuro ;-) – kleopatra

2

Affascinante, se si aggiunge

JFrame.setDefaultLookAndFeelDecorated(true); 

Quindi consente di avere un trascinamento, con la barra del titolo JFrame (utilizza solo il brutto aspetto di Java).

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

Ora che è strano.

Si noti inoltre che è possibile "falso" il vecchio comportamento utilizzando per la trasparenza dei pixel, vedere http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

modo da poter avere il vecchio comportamento sia in Java 6 e 7, ma dovreste caso speciale il codice intorno ad esso e farlo in un modo per uno, un modo per l'altro, possibilmente ...