簡體   English   中英

總是在頂部窗口

[英]ALWAYS on top window

我正在尋找一種解決方案,以便始終將JFrame放在首位,而我始終表示始終。

setAlwaysOnTop( true );

當我以全屏模式開始游戲時,這將無法正常工作。 我知道您通常不希望您的窗戶停留在頂部,但在這種情況下,這是必需的。

無法做到這一點。

例如,即使將Windows Task Manager設置為Always On Top,也將被全屏應用程序覆蓋。

這是由於以下事實:全屏應用程序通常使用不同的圖形上下文並且無法覆蓋。

啟動另一個過程以檢查窗口是否在頂部,如果沒有,則將其設置在頂部。

這聽起來像是Raymond Chen總是必須在http://blogs.msdn.com/b/oldnewthing/上回答的問題。 您如何才能真正真正地永遠地,真正地在前景中保持一扇窗戶? 你不能 因為如果有人ELSE的窗口使用相同的技巧將自己永遠永遠保持在前台會發生什么? 哪一個贏了?

這是一個示例代碼,應該會有所幫助

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秒鍾更新一次這些通知,並且如果我在這些JWindows上調用setVisible(true),則在每次更新時,如果丟失通知,它們將重新獲得最高位置。

如果您指的是DirectX / OpenGL /中的全屏顯示,那么我不確定您是否可以(或應該)真正實現它。 大多數操作系統在全屏期間禁用其本機窗口,以提高渲染性能。 Swing通過本機窗口工具包工作。

您可以編寫一些使用計時器的內容,並在很短的間隔(例如200毫秒)內指示窗口轉到頂部。 根據您的操作系統,這正是您所需要的,或者是導致性能故障或閃爍的可怕原因。

我不確定,但是我敢打賭,全屏窗口也將Always On Top設置為true,在這種情況下,您偶然發現了未定義行為的領域。 通常,將兩個窗口設置為始終位於頂部時,則不能保證訂購。 我認為總體而言,順序僅取決於將它們設置為始終排在最前面的順序。 因此,在這種情況下,我只需要等到應用程序進入全屏狀態,然后將其設置為始終位於最上面,然后看看它是否有效即可。

在其他情況下,我看過的人會啟動線程,然后偶爾將幀重置為始終位於最前面。

所有這些解決方案都很丑陋,因此,請使用能讓您晚上入睡的解決方案。

我一直想做與OP相同的事情,在我的游戲運行時讓我的應用程序在前台運行。 它無法在全屏模式下運行,但是如果您將游戲置於窗口模式並調整窗口設置以適合電視,則可以正常運行。 我只需要frame.setAlwaysOnTop使其工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM