【问题标题】:Java multiple monitor issueJava多显示器问题
【发布时间】:2011-06-21 10:44:01
【问题描述】:
我正在开发一个应用程序,其中三个监视器配置为一个系统。两个监视器具有不同的显示内容,这是使用 java GraphicsEnvironment 和 GraphicsDevice 类实现的。现在,连接到系统的第三个监视器应该显示前两个监视器(Display0 或 Display1)之一的内容,通过它可以查看操作。 (此监视器应该像远程访问软件一样工作,例如 vnc 查看器)。
每个图形设备都有自己的 JFrame 来显示,我正在向这些设备显示我的 JComponents,但是我对这第三台显示器如何处理一无所知。 Java 是否提供任何 API 或机制,以便我可以将一台监视器上的操作显示到另一台监视器上?任何想法/见解都将受到高度赞赏。
问候
尼基
【问题讨论】:
标签:
java
swing
remote-access
multiple-monitors
【解决方案1】:
只读访问并不难。让我们称您拥有 frameA 和 frameB 的 2 个 JFrame 以及新监视器 frameC 上的框架。
您可以将 A 或 B 的内容渲染到 C 中,如下所示:
JFrame frameC = new JFrame();
Container cont = c.getContentPane();
cont.setLayout(new BorderLayout());
JLabel lab = new JLabel();
cont.add(new JScrollPane(lab), BorderLayout.CENTER);
jFrameC.setSize(800,600);
然后,定期运行此代码:
JFrame f = frameA; // or frameB
BufferedImage bi = new BufferedImage(f.getWidth(), f.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bi.createGraphics();
f.paint(g);
g.dispose();
lab.setIcon(new IconImage(bi));
如果你真的想从 frameC 控制 frameA/B,那就有点难了。我可能会从java.awt.Robot 开始。 Java2S 有一些examples demonstrating the use of Robot。
控制“远程”框架最困难的部分是将 frameC 中的鼠标事件转换为 frameA/B。您需要计算图像的偏移量,然后将其转换回另一帧的内容窗格。
注意:SwingUtilities 有几种方法可以帮助翻译坐标。