0

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

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

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

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

4

1 回答 1

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));
                        }
于 2012-12-15T20:09:33.133 回答