2011-09-08 48 views
7

與此相關的問題: Is The Java Tutorials Translucent Window example giving trouble to those playing with jdk7?是否有可能在Java 7中包含標題欄的半透明窗口?

與jdk1.6.0_26我似乎能夠應用到半透明一個JFrame,但jre7並非如此:

NativeException:java.awt.IllegalComponentStateException:框架裝飾

EX(JRuby中的Java腳本,工程JDK1.6不JDK7雖然):

 

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 

所以我的問題是「是否有可能有在JDK7" 半透明的標題欄(我想我創建爲可拖動/可調整大小的透明窗)

回答

8

的Java 7中引入Window.setOpacity()做什麼非官方類AWTUtilities在Java中6那樣

可惜這記錄。並非與窗戶的裝飾工作:

必須滿足以下條件,以設置不透明度值小於1.0f滿足:

(重點煤礦)

+3

不幸的是,這是一種行爲改變,打破現有的代碼... – kleopatra

+0

@kleopatra:但這就是你註冊時,你使用非官方API:'AWTUtilities'沒有在Java SE中定義,並且新方法不會破壞與以前定義的任何公共方法的兼容性。 –

+1

從技術上講,你是對的,在技術上,我沒有:而是使用了AWTUtilitiesWrapper,它是待定功能的半官方預覽(並且廣告相當安全;-) – kleopatra

2

讓人着迷,如果添加

JFrame.setDefaultLookAndFeelDecorated(true); 

然後它允許你有一個可拖動的標題欄JFrame(它只是使用醜陋的java外觀)。

裁判:Pass mouse events to applications behind from a Java UI

現在是怪異。

另外請注意,你可以在「假」的每個像素使用的透明度舊的行爲,見http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

所以你可以在Java 6和7的舊的行爲,但你必須特殊情況下,代碼圍繞它,並做到一種方式,一種方式,另一種方式,可能...