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