2012-09-21 39 views
1

我想在Java(Swing)中開發一個應用程序,它可以讓我在屏幕上疊加網格,並且能夠點擊網格後面的東西 - 比方說桌面上的圖標例如。點擊過去的透明框架(Java)

我會用透明JFrame或透明JWindow來解決這個問題嗎?

不管我使用,透明窗口/幀需要

  • 總是在頂部。
  • 佔據整個屏幕。
  • 用鼠標監聽器註冊每一次點擊。
  • 記錄屏幕上點擊的座標。
  • 允許我使用Graphics類在屏幕上繪製網格,以及其他元素(如數字或圖像),這些元素也應該單擊。

任何方向將不勝感激。

道歉,如果我還沒有足夠具體,但我還沒有找到一個演示窗口或框架,可以做所有這些事情。有一個例子hereanother here - 但我不知道如何在Eclipse中使用WindowUtils。這是我第一次在GUI開發中,除了基類Java類以外,我從未使用過外部庫。

回答

1
    頂部
  • :Frame.setAlwaysOnTop()應該爲你工作
  • 全屏:設置窗口大小顯示尺寸將使它佔據整個屏幕
  • 事件和疊加畫:實際行爲可能因平臺而異,但通常情況下,如果您使用alpha組件繪製到窗口中,並且您的窗口名義上是透明的,那些未繪製的區域(或者有時繪製在某個alpha閾值以下的區域)會將事件傳遞到任何應用程序,窗口或組件在下面。
    如果捕捉事件,則必須重新將它們引入到低於你的任何窗口中,這是不平凡的。如果您不捕獲事件,則需要安裝特定於操作系統的事件處理程序來捕獲感興趣的事件。

JNA的WindowUtils.setWindowTransparent()應提供所需的油漆/事件的行爲,或者您可以使用AWTUtils相當於在最近的JVM版本中提供。

+0

我不確定你的意思是第三顆子彈。如果我使用Java Graphics類在Frame中繪製東西,點擊是否會通過Graphic元素?在旁註中,我使用WindowUtils獲得了透明度,但我仍然不知道如何在透明框架上繪製東西。 –

+0

一般而言,您繪製的區域會收到事件。你不(透明的)區域將允許事件通過。因人而異。 – technomage

+0

請記住,JPanel默認是不透明的,這意味着它們會繪製它們的背景。你需要的內容要麼是自己的背景畫(不繪畫),要麼將任何不透明的祖先設置爲'setOpaque(false)'。 – technomage