我正在开发一个带有三个配置有一个系统的监视器的应用程序。两个监视器具有不同的显示内容,这是使用java GraphicsEnvironment
和GraphicsDevice
类实现的。现在连接到系统的第三个监视器应该显示前两个监视器之一(Display0或Display1)的内容,通过它可以查看操作。 (此监视器应该像远程访问软件的工作方式一样工作,例如vnc viewer)。
每个图形设备都有自己的JFrame来显示,我正在向这些设备显示我的JComponents,但我对第三个显示器如何处理无能为力。 Java是否提供任何API或机制,以便我可以将一台监视器上的操作显示到另一台监视器中?任何想法/见解都将受到高度赞赏。
此致
尼克
答案 0 :(得分:0)
只读访问并不是很难。让我们调用你有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有几种方法可以帮助翻译坐标。