2010-02-26 153 views
3

我只是試驗JFrames,並想知道我的應用程序窗口是否完全可見或被其他應用程序窗口遮擋。另一個應用程序窗口可以是本機應用程序。如果可以,我可以檢索不可見區域的大小和位置嗎?是否有可能知道JFrame是否完全可見?

回答

0

不,這是不可能的,因爲你的Java應用程序只知道它的窗口內容,而沒有別的。窗飾和屏幕的其餘部分由操作系統管理。在像Linux這樣的操作系統中,窗口管理器甚至是一個完全不同的用戶空間進程。另一個本地應用程序也將在另一個用戶空間進程中運行。

請問爲什麼要這麼做?如果您詢問刷新/重繪問題,則無需執行任何操作。您的操作系統有足夠的智能,並且會在您的應用程序再次變爲可見時要求您重新進行重新繪製。

+0

我正在考慮分層信息,z-順序,一個特定的應用程序窗口。我的應用程序大小相同,部分透明,因此跟蹤的窗口仍然可見。 如果跟蹤窗口請求焦點我的窗口將被完全遮蔽,然後我可以調用toFront()再次顯示它。但是,如果其他應用程序僅遮蔽了我窗口的某些部分,我知道這不是所請求關注的跟蹤窗口。 我最初的想法是使用RepaintManager和getDirtyRegion()當我的窗口被停用,失去焦點。但我認爲這也不行!? – kolten 2010-02-26 17:21:22

+0

使用GlassPane代替 - http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html – Nate 2010-02-27 02:22:32

+0

Hi Nate!你能詳細說明一下嗎?我查看了文檔,但無法看到如何以我想要的方式使用它。 – kolten 2010-02-27 09:18:11

1

這裏是一個真是可惡做法,這是我能想到的(和不推薦)的唯一方法:

  • 設置你的JFrame的玻璃面板是完全紅色,顯示玻璃窗格(暫時)。
  • 使用Robot類從當前放置JFrame的屏幕座標對所有像素(或多個像素)進行採樣。
  • 如果您的所有樣品(或根據某個閾值的大多數樣品)均爲紅色,那麼您的JFrame可能沒有任何樣品。
  • 最後,再次隱藏玻璃窗格。

替代(更好的解決方案)

直接讓toFront()JFrame將其帶到前面,確保它焦點。

相關問題