ВСЕГДА на верхнем окне - PullRequest
10 голосов
/ 16 июня 2010

Я ищу решение, чтобы JFrame всегда был на вершине, а с всегда я имею в виду всегда.

setAlwaysOnTop( true );

Это не сработает, когда я запускаю игру в полноэкранном режиме. Я знаю, что вы обычно не хотите, чтобы ваши окна оставались сверху, но в этом случае это необходимо.

Ответы [ 8 ]

4 голосов
/ 16 июня 2010

Это невозможно сделать.

Например, диспетчер задач Windows, даже если для него установлено значение «Всегда сверху», будет покрыт полноэкранными приложениями.

Это связано с тем, что полноэкранные приложения обычно используют другой графический контекст и не могут быть наложены.

2 голосов
/ 16 июня 2010

Запустите другой процесс, чтобы проверить, находится ли окно сверху, если нет, установите его сверху.

1 голос
/ 16 июня 2010

Это пример кода, который должен быть полезен

public class AllWaysOnTop extends JFrame implements WindowListener {

    AllWaysOnTop() {
        // Code to setup your frame
        addWindowListener(this);
        // Code to show your frame
    }

    // The window event handlers. We use WindowDeactivated to
    // try and keep the splash screen on top. Usually only keeps
    // the splash screen on top of our own java windows.
    public void windowOpened(WindowEvent event){};
    public void windowActivated(WindowEvent event){};
    public void windowDeactivated(WindowEvent event){
        toFront();
    }
    public void windowIconified(WindowEvent event){};
    public void windowDeiconified(WindowEvent event){};
    public void windowClosed(WindowEvent event){};
    public void windowClosing(WindowEvent event) {};
}

Ссылка Это сообщение на форуме

1 голос
/ 16 июня 2010

Это звучит как вопрос, на который Рэймонд Чен всегда должен ответить на http://blogs.msdn.com/b/oldnewthing/. Как вы можете действительно вечно и действительно держать окно на переднем плане?Ты не можешьПотому что, что случится, если кто-нибудь из окон ELSE использует один и тот же трюк, чтобы всегда и всегда оставаться на переднем плане?Кто победит?

0 голосов
/ 11 мая 2014

Я хотел сделать то же самое, что и OP, чтобы приложение работало на переднем плане, пока игра работала.Он не работает в полноэкранном режиме, но если вы переведете игру в оконный режим и отрегулируете настройки окна под свой телевизор, это сработает.Мне нужен был только frame.setAlwaysOnTop, чтобы он работал.

0 голосов
/ 01 октября 2013

Я знаю, что этот пост старый, но я столкнулся с этой проблемой и нашел удовлетворительное решение. В моей программе есть несколько уведомлений о том, что я хочу всегда быть на вершине, но когда фильм вошел в полноэкранный режим, они исчезли. К счастью, моя программа обновляет эти уведомления каждые 5 секунд, и если я вызываю setVisible (true) для этих JWindows, при каждом обновлении они возвращают верхнюю позицию, если они ее потеряли.

0 голосов
/ 16 июня 2010

Я не уверен, но могу поспорить, что в полноэкранном окне также всегда установлено значение Всегда сверху, и в этом случае вы попали в область неопределенного поведения.В целом, когда два окна установлены всегда сверху, гарантия заказа не гарантируется.Я думаю, в общем, хотя порядок просто зависит от порядка, в котором они были установлены всегда сверху.Так что в этом случае я бы просто подождал, пока приложение не перейдет в полноэкранный режим, чтобы установить его всегда сверху, и посмотреть, работает ли он.

В других случаях я видел, как люди запускают потоки, а затем время от времени сбрасывают фрейм, чтобы он всегда был включен.Топ.

Все эти решения ужасны, поэтому просто используйте тот, который позволяет вам спать по ночам.

0 голосов
/ 16 июня 2010

Если вы имеете в виду полноэкранный режим, как в DirectX / OpenGL / что угодно, я не уверен, что вы можете (или должны) действительно справиться с этим.Большинство операционных систем отключают свои собственные окна во время полного экрана, чтобы улучшить производительность рендеринга.Swing работает через собственный набор инструментов для работы с окнами.

Вы можете написать что-то, что использует таймер и через короткие промежутки времени (например, 200 мс) заставляет ваше окно идти наверх.В зависимости от вашей операционной системы это будет именно то, что вам нужно, или ужасная причина проблем с производительностью или мерцания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...