Создание не сфокусированного окна в Java - PullRequest
6 голосов
/ 09 января 2010

(решено: WindowStateListener и отложенный вызов toBack, когда окно находится в фокусе)

Привет всем!

Я пытался выяснить, как сделать java.awt.Window (любой подкласс подойдет), чтобы его нельзя было вывести на фронт. Я работаю над Java-подобной Самуризу программой, которая появляется под всеми окнами приложения и отображает виджеты на экране. Точно так же, как « Всегда в верхних окнах с Java », я надеюсь на что-то простое, надеюсь, просто на один вызов метода, если это возможно, но я проверил документы API и у меня не было удачи.

Edit: Извините, я имел в виду «всегда снизу», а не просто «не сфокусирован».

Вот базовый контрольный пример. При нажатии на окно, оно не должно быть выше других, находящихся в данный момент на экране:

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);
    }
}

Ответы [ 2 ]

8 голосов
/ 09 января 2010

Вы хотите использовать setFocusableWindowState(false)

(кстати, это было в документе API, связанном с верхним ответом поста, на который вы ссылались)

edit: как насчет добавления слушателя к изменению состояния окна, которое выполняет toBack()?

edit: вы могли бы также рассмотреть возможность переопределения метода toFront, чтобы предотвратить что-либо, потянувшее окно вперед.

1 голос
/ 09 января 2010

setFocusableWindowState

public void setFocusableWindowState (логическое 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

...