ВСЕГДА на верхнем окне
Я ищу решение, чтобы держать JFrame всегда сверху и всегда всегда на самом деле.
setAlwaysOnTop( true );
Это не будет работать, когда я начну игру в полноэкранном режиме. Я знаю, что вы, как правило, не хотите, чтобы ваши окна оставались на вершине, но в этом случае это требовалось.
Ответы
Ответ 1
Это невозможно сделать.
Например, диспетчер задач Windows, даже если он установлен на Always on Top, будет закрыт полноэкранными приложениями.
Это связано с тем, что полноэкранные приложения обычно используют другой графический контекст и не могут быть наложены.
Ответ 2
Запустите другой процесс, чтобы проверить, находится ли окно сверху, если нет, установите его сверху.
Ответ 3
Это звучит как вопрос, на который Рэймонд Чен всегда должен отвечать на http://blogs.msdn.com/b/oldnewthing/. Как вы можете действительно навсегда и для истинного сохранить окно на переднем плане? Вы не можете. Потому что то, что произойдет, если в каком-то окне ELSE используется тот же трюк, чтобы держать себя всегда всегда и всегда на переднем плане? Кто победит?
Ответ 4
Это пример кода, который должен быть полезен
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) {};
}
Ссылка
Этот пост форума
Ответ 5
Если вы имеете в виду полноэкранный режим, как в DirectX/OpenGL/что-то еще, я не уверен, что вы (или должны) действительно его отключите. Большинство операционных систем отключает их собственное окно в полноэкранном режиме, чтобы улучшить производительность рендеринга. Swing работает через встроенный инструментарий для окон.
Вы можете написать что-то, использующее таймер и через короткие промежутки времени (например, 200 мс), чтобы ваше окно переместилось в начало. В зависимости от вашей операционной системы это будет именно то, что вам нужно, или ужасная причина проблем производительности или мерцания.
Ответ 6
Я не уверен, но я бы поспорил, что полноэкранное окно также имеет Always On Top, установленное в true, и в этом случае вы наткнулись на область поведения undefined. Обычно, когда два окна всегда установлены сверху, нет никаких гарантий относительно порядка. Я думаю, что в целом, порядок зависит только от порядка, в котором они всегда были на высоте. Поэтому в этом случае я просто подожду, пока приложение не войдет в полноэкранный режим, чтобы всегда устанавливать его сверху и видеть, работает ли это.
В других случаях ive видит, что люди запускают потоки, а затем изредка reset рамку всегда сверху.
Все эти решения являются уродливыми, поэтому используйте только тот, который позволяет вам спать по ночам.
Ответ 7
Я знаю, что этот пост старый, но я столкнулся с этой проблемой, и я нашел удовлетворительное решение.
У моей программы есть некоторые уведомления, которые я хочу быть всегда наверху, но когда фильм вошел в полноэкранный режим, они исчезли. Fortunate, моя программа обновляет эти уведомления каждые 5 секунд, и если я вызываю setVisible (true) в этих JWindows, при каждом обновлении они восстанавливают верхнюю позицию, если они потеряли ее.
Ответ 8
Я искал сделать то же самое, что и OP, у меня появилось приложение на переднем плане, пока игра закончилась. Он не работает в полноэкранном режиме, но если вы поместите игру в оконный режим и настройте параметры окна, чтобы они соответствовали вашему телевизору, это работает. Мне понадобился только frame.setAlwaysOnTop, чтобы он работал.