为自定义驱动程序创建GraphicsDevice

我正在研究一个在嵌入式系统中使用Java的项目。 我有屏幕和触摸输入的驱动程序,以及用于文本输入的虚拟键盘。 我的屏幕驱动程序有一个可以绘制的Graphics2D对象和一个用于更新的repaint(Rectangle)方法。 类似地,触摸驱动程序能够为侦听器生成MouseEvents

现在我正在直接绘制到屏幕上。 这很好,但我真正想要的是允许我的库的用户创建一个JFrame并使用普通的Swing元素。 但是,默认的GraphicsEnvironment是无头的,因为Java没有看到我的EInkDriver类或我的TouchDriver类。

我知道有一些方法可以调用组件的paint方法来获取图像; 但是当你绘制一个Container时会出现问题,我也想向用户提供一个GraphicsConfiguration这样他们就可以编写类似JFrame frame = new JFrame(getEInkGraphicsConfiguration()); 并继续进行,好像他们正在编写一个桌面Swing应用程序。

鉴于我已经拥有的这些function,我将如何创建一个允许我在项目中使用Swing的GraphicsDeviceGraphicsEnvironment

我简单地看了一下抽象类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)); }