我创建了一个项目,当它运行时,会裁剪图像并制作屏幕截图。我希望将屏幕截图放在另一个不同的JFrame
中。如何加载屏幕截图?任何的想法?
我把代码放在两个不同的框架上。第一帧(Frame1
)制作屏幕截图,在第二帧(Results
)上,我想传递屏幕截图并将其放在一个JLabel
中。
答案 0 :(得分:1)
在两个不同的JVM中运行的两个JFrame
之间的通信!不,我永远不会注意做你想要实现的目标。这种方法记忆多达两倍,需要不成熟但复杂的做事方式,使整个过程不仅缓慢,而且不是很有道理。
我们应该设计流程的方式:
JFrame
CardLayout
JLayeredPane
:这对您的用例更为完美SwingWorker
现在讨论如何使用它们来实现目标将花费巨大的空间和时间成本,因此超出了您的问题的范围。请逐一查看这篇文章:
修改强>
是的,我确实有一个解决方案,需要两个额外的线程:
使用Frame
从JVM将屏幕截图的新图像写入文件位置:使用ImageIO.write()
。我会将文件命名为当前时间和适当的图片扩展名(jpg,png等):currentTimestamp.jpg
currentTimeStamp.png
包含Results
框架的JVM的另一个线程,用于检查新图像文件是否可用,如果是,请使用ImageIO.read()
读取,然后从文件位置删除。
答案 1 :(得分:1)
由于您使用以下两行保存文件:
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);
}
});
}
}