2011-09-08 24 views
7

Podobne do tego pytania: Is The Java Tutorials Translucent Window example giving trouble to those playing with jdk7?Czy w java 7 można wyświetlać półprzezroczyste okna, w tym pasek tytułu?

z jdk1.6.0_26 wydaje mi się, aby móc zastosować przezroczystość do JFrame, ale nie tak z jre7:

NativeException: java.awt.IllegalComponentStateException: Rama jest urządzony

ex (jruby skryptów Java, nie działa jdk1.6 z jdk7 choć):

 

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 

Więc moje pytanie brzmi: „Czy to możliwe, aby mieć półprzezroczysty pasek tytułu w jdk7" (Chciałbym przezroczyste okienko Tworzę być przeciągany/resizable)

Odpowiedz

8

Java 7 wprowadzono Window.setOpacity() robić co nieoficjalna klasa AWTUtilities zrobił w Javie 6.

Niestety to udokumentowane nie działać z okna zdobione:

następujące warunki muszą być spełnione, aby ustawić wartość krycia mniej niż 1.0f:

(kopalnia nacisk)

+3

Niestety, jest to zmiana zachowania, która niszczy istniejący kod ... – kleopatra

+0

@kleopatra: ale to jest to, do czego się zapisałeś, kiedy używał nieoficjalnego API: 'AWTUtilities' nie są zdefiniowane w Java SE, a nowa metoda nie narusza kompatybilności z żadną wcześniej zdefiniowaną publiczną metodą. –

+1

technicznie, masz rację, również technicznie, nie użyłem: zamiast tego użyłem AWTUtilitiesWrapper, który był pół-oficjalny podgląd przyszłej funkcjonalności (i reklamowany jako raczej bezpieczny ;-) – kleopatra

2

Fascynujące, jeśli dodać

JFrame.setDefaultLookAndFeelDecorated(true); 

Następnie pozwala na przeciągnięcie, z belką tytułową JFrame (po prostu używa brzydkiego wyglądu i stylu Java).

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

Teraz to jest dziwne.

Należy również pamiętać, że można „fałszywe” stary zachowanie przejrzystości przy użyciu per pixel, zobacz http://docs.oracle.com/javase/tutorial/uiswing/misc/trans_shaped_windows.html

więc można mieć starego zachowania zarówno Java 6 i 7, ale trzeba do specjalnego przypadku kodu dookoła niego i zrobić to w jedną stronę dla jednego, w jedną dla drugiej, być może ...