为自定义驱动程序创建GraphicsDevice

时间:2012-12-15 19:50:10

标签: java swing user-interface headless

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

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

我知道有办法调用组件的paint方法来获取图像;但是当你画一个Container时会出现问题,而且我也想向用户提供一个GraphicsConfiguration,这样他们就可以像JFrame frame = new JFrame(getEInkGraphicsConfiguration());那样写一些内容,就像他们一样正在编写一个桌面Swing应用程序。

鉴于我已有的这些功能,我将如何创建允许我在项目中使用Swing的GraphicsDeviceGraphicsEnvironment

1 个答案:

答案 0 :(得分:1)

我简单地看了一下抽象类GraphicsEnvironment,并且猜测,可以派生自己的类,并使用第64行的“java.awt.graphicsenv”键来注册它。

幸运的是,有一个抽象类,代码很少。


此后

GraphicsEnvironment的以下代码显示:

  1. 用于无头的系统属性(您可以设置)。
  2. 环境设置DISPLAY。
  3. 也许你可以使用这个信息。

                            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));
                            }