Java 为自定义驱动程序创建图形设备
我正在一个嵌入式系统中使用Java的项目中工作。我有用于屏幕和触摸输入的驱动程序,以及用于文本输入的虚拟键盘。我的屏幕驱动程序有一个Java 为自定义驱动程序创建图形设备,java,swing,user-interface,headless,Java,Swing,User Interface,Headless,我正在一个嵌入式系统中使用Java的项目中工作。我有用于屏幕和触摸输入的驱动程序,以及用于文本输入的虚拟键盘。我的屏幕驱动程序有一个Graphics2D对象,您可以在其中绘制,还有一个repaint(矩形)更新方法。类似地,触摸驱动程序能够为监听器生成MouseEvents 现在我正在直接在屏幕上绘图。这很好,但我真正想要的是允许库的用户创建JFrame并使用普通Swing元素。但是,默认的GraphicsEnvironment是headless,因为Java看不到myEInkDriver类或m
Graphics2D
对象,您可以在其中绘制,还有一个repaint(矩形)
更新方法。类似地,触摸驱动程序能够为监听器生成MouseEvents
现在我正在直接在屏幕上绘图。这很好,但我真正想要的是允许库的用户创建JFrame并使用普通Swing元素。但是,默认的GraphicsEnvironment是headless,因为Java看不到myEInkDriver
类或myTouchDriver
类
我知道有很多方法可以调用组件的paint
方法来获取图像;但是,在绘制容器时,这会出现问题,我还想向用户提供图形配置
,以便他们可以编写类似JFrame frame=newjframe(getEInkGraphicsConfiguration())的内容代码>并继续,就像他们正在编写桌面Swing应用程序一样
考虑到我已经拥有的这些功能,我将如何创建一个GraphicsDevice
或GraphicsEnvironment
,使我能够在我的项目中使用Swing?我对抽象类进行了非常简短的研究,并猜测,可能会派生出自己的类,然后使用“java.awt.graphicsenv”第64行的键来注册它
幸运的是,有一个抽象类,代码很少
之后
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));
}
感谢您的快速响应,但我对“派生自己的类”的细节更感兴趣。如果我可以派生该类,那么我可以通过调用JFrame(GraphicsConfiguration)
来使用它。然而,我被困在如何实际派生那个类的问题上。我想覆盖图形设备。getFullScreenWindow()
,但如果没有图形环境,我无法创建窗口
,这给我留下了一个鸡和蛋的问题。我没有真正研究它,不保证,但是我想到了设置java.awt.graphicsenv=my.packge.MyGraphicsEnvironmentChild
。我理解这一部分。。。但它没有解释如何实际实现my.packge.MyGraphicsEnvironmentChild
。如果我可以实现那个类,那么我就不需要设置那个属性,因为我可以调用JFrame(newmygraphicsenvironmentchild())
。你的回答假设我可以实现这个类,但我不能——这就是我的问题所在。不幸的是,你的回答没有帮助。