2010-01-09 12 views
6

(SOLVED: a WindowStateListener i odroczony wywołanie toBack gdy okno jest skupiony)Dokonywanie Unfocusable Okno w Javie

Witam wszystkich!

Próbowałem dowiedzieć się, jak zrobić java.awt.Window (jakakolwiek podklasa zrobi), aby nie można go było przenieść na wierzch. Pracuję nad programem Java podobnym do Samurize, który pojawia się pod wszystkimi oknami aplikacji i wyświetla Widgety na ekranie. Podobnie jak "Always on top windows with Java", mam nadzieję na coś prostego, miejmy nadzieję, tylko pojedyncze wywołanie metody, jeśli to możliwe, ale sprawdziłem przez dokumenty API i nie miałem szczęścia.

Edytuj: Przepraszam, miałem na myśli "zawsze na dole", a nie "nieostry".

Oto podstawowy przypadek testowy. Po kliknięciu na oknie, nie powinny pochodzić przede wszystkich innych aktualnie na ekranie:

import java.awt.*; 
import javax.swing.*; 

public class Main extends JFrame { 
    public Main() { 
     Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 

     setFocusable(false); 
     setFocusableWindowState(false); 
     setBounds(new Rectangle(dim)); 

     toBack(); 
    } 

    public static void main(String[] args) { 
     new Main().setVisible(true); 
    } 
} 

Odpowiedz

8

Chcesz użyć setFocusableWindowState(false)

(FWIW, to było w dokumencie API połączonego przez górną odpowiedzi z post, o którym wspomniałeś)

edytuj: co z dodaniem detektora do zmiany stanu okna, która wykonuje toBack()?

edytuj: możesz również rozważyć zmianę metody toFront, aby zapobiec cokolwiek od wyciągnięcia okna do przodu.

+0

To powinno działać, ale przynajmniej w moim systemie Mac OS X 10.6 okno może być ciągle skoncentrowany. –

+0

Edytowane, przepraszam. Zobacz post. –

+0

Aha! Rozgryzłem to. Trzeba po prostu odroczyć wywoływanie 'toBack()' z 'NSTimer' podczas wykonywania obsługi WindowStateListener. –

1

setFocusableWindowState

public void setFocusableWindowState (logiczna focusableWindowState)

Sets whether this Window can become the focused Window if it meets the other requirements outlined in isFocusableWindow. If this Window's focusable Window state is set to false, then isFocusableWindow will return false. If this Window's focusable Window state is set to true, then isFocusableWindow may return true or false depending upon the other requirements which must be met in order for a Window to be focusable. 

Setting a Window's focusability state to false is the standard mechanism for an application to identify to the AWT a Window which will be used as a floating palette or toolbar, and thus should be a non-focusable Window. Setting the focusability state on a visible Window can have a delayed effect on some platforms — the actual change may happen only when the Window becomes hidden and then visible again. To ensure consistent behavior across platforms, set the Window's focusable state when the WIndow is invisible and then show it. 

Parameters: 
    focusableWindowState - whether this Window can be the focused Window 
Since: 
    1.4 
See Also: 
    isFocusableWindow(), getFocusableWindowState(), isShowing(), Component.setFocusable(boolean) 

http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#setFocusableWindowState%28boolean%29