我正在开发一个基于Java swing的应用程序,该应用程序将有3个不同的主JFrame,并且每个JFrame中的每一个都必须显示在系统中存在的三个显示监视器之一上。此外,应用程序将具有警告特定显示器 - 监视器断开连接或重新连接的能力。
每个main-JFrame必须显示在特定的显示屏上。这是由于这些显示器所在的位置。更像是一个销售点场景,其中一个监视器可以为安全人员显示销售人员和其他用户和其他人的事物。
现在主要的问题是如何知道哪个监视器是哪个。我通过从Java中调用VBScript获取每个监视器的serial-no来解决这个问题。
但另一个问题是如何映射串行 - 没有Java中的监视器信息。在Java中,我可以得到的每个监视器对应的是java.awt.GraphicsDevice实例,我不知道如何将serial-no信息映射到此,因为java.awt.GraphicsDevice的这些实例是GraphicsEnvironment的唯一方法。 getLocalGraphicsEnvironment()。getScreenDevices()并且每次调用函数时,此函数都不能确保它将以特定顺序返回设备。
期待感谢
答案 0 :(得分:2)
Java通过GraphicsEnvironment和GraphicsDevice对象支持多个监视器。查看GraphicsDevice javadoc以获取更多信息。
答案 1 :(得分:1)
GraphicsDevice.getIDString()
方法是否为您提供了一个可以与序列号进行比较的稳定值?如果是这样,您可以将所有标识的序列号写入属性文件,并在每次程序启动时进行比较(如果ID不是序列号)。此属性文件还可以存储每个显示的位置(左,中,右或顶部,中间,底部等)
如果无法确定ID和序列号之间的对应关系,只要看到属性文件中没有的显示ID,就可以触发“显示设置例程”。
此例程将提示用户确认显示器型号并输入每个显示器的位置(考虑Win,OS X,Linux等中的显示方向设置)。如果您可以将窗口小部件绘制到特定显示器,则应该能够收集此信息。此外,如果用户重新排列其显示器的物理位置(可能交换两个显示器的位置),那么他们可以手动执行此例程。