繁体   English   中英

将图像从JFrame传递到另一个JFrame

[英]Pass an Image from a JFrame to another JFrame

我做了一个项目,当它运行时,它会裁剪图像并制作截图。 我希望将屏幕截图放在另一个不同的JFrame 如何加载屏幕截图? 任何想法?

我把代码放在两个不同的框架上。 第一帧( Frame1 )制作屏幕截图,在第二帧( Results )我想传递屏幕截图并将其放在一个JLabel

两个JFrame之间的通信在两个不同的JVM中运行! 不,我永远不会注意做你想要实现的目标。 这种方法记忆多达两倍,需要不成熟但复杂的做事方式,使整个过程不仅缓慢,而且不是很有意义。

我们应该如何设计流程:

  1. 使用一个JFrame
  2. 如果需要更改具有不同视图的内容窗格:使用CardLayout
  3. 如果需要在Stack中一次查看多个组件,一个在另一个上面使用JLayeredPane :这对于您的用例更完美
  4. 对于需要后台执行和在任务的就绪部分更新GUI的连续且渐进的任务,使用SwingWorker

现在讨论如何使用它们来实现您的目标将花费巨大的空间和时间成本,因此超出了您的问题的范围。 请逐一查看这篇文章:

  1. 使用多个JFrame:好与坏
  2. 如何使用分层窗格
  3. 工作者线程和SwingWorker

编辑:

是的,我确实有一个解决方案,需要两个额外的线程:

  1. 一个用屏幕截图的新图像从带有Frame的JVM写入文件位置:使用ImageIO.write() 我会用当前时间和适当的图像扩展名(jpg,png等)命名该文件: currentTimestamp.jpg currentTimeStamp.png

  2. 包含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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM