为自定义驱动程序创建GraphicsDevice
我正在研究一个在嵌入式系统中使用Java的项目。 我有屏幕和触摸输入的驱动程序,以及用于文本输入的虚拟键盘。 我的屏幕驱动程序有一个可以绘制的Graphics2D
对象和一个用于更新的repaint(Rectangle)
方法。 类似地,触摸驱动程序能够为侦听器生成MouseEvents
。
现在我正在直接绘制到屏幕上。 这很好,但我真正想要的是允许我的库的用户创建一个JFrame并使用普通的Swing元素。 但是,默认的GraphicsEnvironment是无头的,因为Java没有看到我的EInkDriver
类或我的TouchDriver
类。
我知道有一些方法可以调用组件的paint
方法来获取图像; 但是当你绘制一个Container
时会出现问题,我也想向用户提供一个GraphicsConfiguration
这样他们就可以编写类似JFrame frame = new JFrame(getEInkGraphicsConfiguration());
并继续进行,好像他们正在编写一个桌面Swing应用程序。
鉴于我已经拥有的这些function,我将如何创建一个允许我在项目中使用Swing的GraphicsDevice
或GraphicsEnvironment
?
我简单地看了一下抽象类GraphicsEnvironment ,并猜测,可以派生自己的类,并使用第64行的“java.awt.graphicsenv”键来注册它。
幸运的是有一个抽象类,代码很少。
此后
GraphicsEnvironment的以下代码显示:
- 系统属性(您可以设置)用于无头或无头。
- 环境设置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)); }