Поверх остальных окон окно

Я ищу решение для хранения JFrame поверх остальных окон, и со всегда я действительно всегда имею в виду.

setAlwaysOnTop( true );

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

10
задан 16 June 2010 в 17:56
поделиться

6 ответов

Этого нельзя сделать.

Например, диспетчер задач Windows, даже если он установлен в положение Always on Top, будет закрыт полноэкранными приложениями.

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

4
ответ дан 4 December 2019 в 02:49
поделиться

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

2
ответ дан 4 December 2019 в 02:49
поделиться

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

1
ответ дан 4 December 2019 в 02:49
поделиться

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

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

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

0
ответ дан 4 December 2019 в 02:49
поделиться

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

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
ответ дан 4 December 2019 в 02:49
поделиться

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

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

0
ответ дан 4 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: