2012-12-15 83 views
0

我正在開發一個在嵌入式系統中使用Java的項目。我有用於屏幕和觸摸輸入的驅動程序,以及用於文本輸入的虛擬鍵盤。我的屏幕驅動程序有一個Graphics2D對象可以繪製到repaint(Rectangle)更新方法。同樣,觸摸驅動程序能夠爲聽衆生成MouseEvents爲定製驅動程序創建GraphicsDevice

現在我正在使用直接繪製到屏幕上。這很好,但我真正想要的是允許我的庫的用戶創建JFrame並使用普通的Swing元素。但是,默認的GraphicsEnvironment是無頭的,因爲Java沒有看到我的EInkDriver類或我的TouchDriver類。

我知道有辦法調用組件的paint方法來獲取圖像;但是,當您繪製Container時,這存在問題,並且我還想向用戶展示GraphicsConfiguration,以便他們可以編寫類似JFrame frame = new JFrame(getEInkGraphicsConfiguration());的東西,並繼續進行,就像編寫桌面Swing應用程序一樣。

鑑於我已擁有這些功能,我將如何創建GraphicsDeviceGraphicsEnvironment,這將允許我在我的項目中使用Swing?

回答

1

我對抽象類GraphicsEnvironment進行了很簡短的介紹,並猜測,可能會派生自己的類,並使用第64行的「java.awt.graphicsenv」鍵進行註冊。

幸運的是有一個抽象類,代碼很少。


此後

從GraphicsEnvironment中下面的代碼顯示:

  1. 系統屬性(您可能設置),其用於無頭與否。
  2. 環境設置DISPLAY。

也許您可以使用此信息。

     String osName = System.getProperty("os.name"); 
         if (osName.contains("OS X") && "sun.awt.HToolkit".equals(
           System.getProperty("awt.toolkit"))) 
         { 
          headless = defaultHeadless = Boolean.TRUE; 
         } else { 
          headless = defaultHeadless = 
           Boolean.valueOf(("Linux".equals(osName) || 
               "SunOS".equals(osName) || 
               "FreeBSD".equals(osName) || 
               "NetBSD".equals(osName) || 
               "OpenBSD".equals(osName)) && 
               (System.getenv("DISPLAY") == null)); 
         } 
+0

感謝您的快速反應,但我更關心「派生自己的班級」的細節。如果我可以派生類,那麼我可以通過調用'JFrame(GraphicsConfiguration)'來使用它。然而,我堅持如何實際派生該類。我正在考慮覆蓋'GraphicsDevice.getFullScreenWindow()',但是如果沒有'GraphicsEnvironment',我就無法創建'Window',這讓我產生了一個雞蛋和雞蛋的問題。 –

+0

我沒有真正看過它,沒有保證,但我想到了設置'java.awt.graphicsenv = my.packge.MyGraphicsEnvironmentChild'。 –

+0

我明白那部分......它並沒有解釋如何實際實現'my.packge.MyGraphicsEnvironmentChild'。如果我可以實現該類,那麼我不需要設置該屬性,因爲我可以調用'JFrame(new MyGraphicsEnvironmentChild())'。你的答案假定我可以實現這個課程,但我不能這麼做 - 這就是我的問題所要求的。所以不幸的是你的回答沒有幫助。 –