Есть ли в Java способ, чтобы окно было «Всегда наверху», независимо от того, переключает ли пользователь фокус на другое приложение? Я искал в Интернете, и все решения опираются на какой-то интерфейс JNI с собственными привязками. Неужели это не единственный способ сделать это? .. Или нет?
java
user-interface
swing
awt
Лапли Андерсон
источник
источник
По моим наблюдениям, я обнаружил, что привилегия AlwaysOnTop предоставляется самому последнему процессу, который требует, чтобы он всегда был наверху.
Итак, если у вас есть приложение, которое,
setAlwaysOnTop(true)
а затем другое приложение использует эту опцию, привилегия предоставляется второму приложению. Чтобы обойти это, я установилsetAlwaysOnTop(false)
и сноваsetAlwaysOnTop(true)
всякий раз, когда какое-либо окно появляется поверх текущего окна.Я проверил это с помощью
wordweb
inwindows
. WordWeb - одно из приложений, использующихAlwaysOnTop
опцию изOS
Я не уверен, правильно ли это работает с вашим игровым сценарием.
Предупреждение : я не знаю о побочных эффектах.
Вот пример кода:
import java.awt.event.*; import javax.swing.*; public class MainWindow extends JFrame implements WindowFocusListener { public MainWindow() { addWindowFocusListener(this); setAlwaysOnTop(true); this.setFocusable(true); // this.setFocusableWindowState(true); panel = new JPanel(); //setSize(WIDTH,HEIGHT); setUndecorated(true); setLocation(X,Y); setExtendedState(MAXIMIZED_BOTH); setVisible(true); } public void windowGainedFocus(WindowEvent e){} public void windowLostFocus(WindowEvent e) { if(e.getNewState()!=e.WINDOW_CLOSED){ //toFront(); //requestFocus(); setAlwaysOnTop(false); setAlwaysOnTop(true); //requestFocusInWindow(); System.out.println("focus lost"); } } private JPanel panel; private static final int WIDTH = 200; private static final int HEIGHT = 200; private static final int X = 100; private static final int Y = 100; public static void main(String args[]){ new MainWindow();} }
источник
не используйте setFullScreenWindow, просто получите размер экрана, а затем setSize, и все будет хорошо.
источник