![](/img/trans.png)
[英]pass value from Jframe to another Jframe then pass to another JFrame?
[英]Pass an Image from a JFrame to another JFrame
我做了一个项目,当它运行时,它会裁剪图像并制作截图。 我希望将屏幕截图放在另一个不同的JFrame
。 如何加载屏幕截图? 任何想法?
我把代码放在两个不同的框架上。 第一帧( Frame1
)制作屏幕截图,在第二帧( Results
)我想传递屏幕截图并将其放在一个JLabel
。
两个JFrame
之间的通信在两个不同的JVM中运行! 不,我永远不会注意做你想要实现的目标。 这种方法记忆多达两倍,需要不成熟但复杂的做事方式,使整个过程不仅缓慢,而且不是很有意义。
我们应该如何设计流程:
JFrame
CardLayout
JLayeredPane
:这对于您的用例更完美 SwingWorker
现在讨论如何使用它们来实现您的目标将花费巨大的空间和时间成本,因此超出了您的问题的范围。 请逐一查看这篇文章:
编辑:
是的,我确实有一个解决方案,需要两个额外的线程:
一个用屏幕截图的新图像从带有Frame
的JVM写入文件位置:使用ImageIO.write()
。 我会用当前时间和适当的图像扩展名(jpg,png等)命名该文件: currentTimestamp.jpg
currentTimeStamp.png
包含Results
框架的JVM的另一个线程,用于检查是否有新的图像文件可供使用,如果是这样,请使用ImageIO.read()
读取它,然后从文件位置删除。
检查: 如何使用ImageIO进行读写
由于您使用以下两行保存文件:
File save_path=new File("right.jpg");
ImageIO.write(img, "JPG", save_path);
您只需将right.jpg文件读入第二帧即可。 下面的JFrame将图像加载到JLabel中,然后将其添加到JPanel中。
public class Result extends JFrame {
public Result(){
getContentPane().setBackground(Color.white);
initComponents();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
add(panel);
JLabel im = new JLabel(new ImageIcon("right.jpg"));
panel.add(im);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Result tmp = new Result();
tmp.setSize(600, 600);
tmp.setVisible(true);
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.