2011-09-08 24 views
7

Liên quan đến câu hỏi này: Is The Java Tutorials Translucent Window example giving trouble to those playing with jdk7?Có thể có một cửa sổ mờ trong java 7 bao gồm cả thanh tiêu đề không?

với jdk1.6.0_26 tôi dường như để có thể áp dụng để mờ một JFrame, nhưng không phải như vậy với jre7:

NativeException: java.awt.IllegalComponentStateException: Khung được trang trí

cũ (JRuby kịch bản java, công trình jdk1.6 không phải với JDK7 dù):

 

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 

Vì vậy, câu hỏi của tôi là "là nó có thể có một thanh tiêu đề mờ trong JDK7" (Tôi muốn một cửa sổ trong suốt tôi là tạo ra được kéo/thay đổi kích thước)

Trả lời

8

Java 7 giới thiệu Window.setOpacity() để làm những gì lớp không chính thức AWTUtilities đã làm trong Java 6.

Đáng tiếc là nó tài liệu không làm việc với các cửa sổ được trang trí:

các điều kiện sau phải được đáp ứng để thiết lập giá trị opacity ít hơn 1.0f:

(Mỏ nhấn mạnh)

+3

thật không may, đó là một thay đổi hành vi phá vỡ mã hiện tại ... – kleopatra

+0

@ kleopatra: nhưng đó là những gì bạn đã đăng ký khi bạn API không chính thức được sử dụng: 'AWTUtilities' không được định nghĩa trong Java SE và phương thức mới không phá vỡ khả năng tương thích với bất kỳ phương thức công khai đã được xác định trước nào. –

+1

về mặt kỹ thuật, you'r đúng, cũng về mặt kỹ thuật, tôi đã không: thay vì sử dụng AWTUtilitiesWrapper đó là một bản xem trước chính thức một nửa của chức năng được (và được quảng cáo như là an toàn ;-) – kleopatra

2

Hấp dẫn, nếu bạn thêm

JFrame.setDefaultLookAndFeelDecorated(true); 

Sau đó, nó cho phép bạn có một kéo, với thanh tiêu đề JFrame (nó chỉ sử dụng cái nhìn và cảm giác xấu xí của java).

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

Điều này thật lạ.

Cũng lưu ý rằng bạn có thể "giả" các hành vi cũ sử dụng cho mỗi tính minh bạch pixel, thấy http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

vì vậy bạn có thể có các hành vi cũ ở cả hai java 6 và 7, nhưng bạn sẽ phải trường hợp đặc biệt mã xung quanh nó và làm điều đó một cách cho một, một cách khác, có thể ...

Các vấn đề liên quan