【问题标题】:How to create an image from a JFrame with setVisible(false)?如何使用 setVisible(false) 从 JFrame 创建图像?
【发布时间】:2014-08-18 22:59:27
【问题描述】:

我创建了一个 JFrame,它基本上通过一些计算创建了一个网格,我需要从中获取一个图像,我目前正在使用:

public static BufferedImage createImageFromFrame(Component component) {
    int w = component.getWidth();
    int h = component.getHeight();
    BufferedImage image = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
    component.paint( image.getGraphics() );
    return image;
}

调用方式:

JFrame window = new JFrame();
// set stuff
BufferedImage img = d.createImageFromFrame(window.getContentPane());

这样就很好了。但是现在我想从不同的帧创建多个图像,我不想每个都出现在屏幕上,我只想要从它们生成的图像。 但我注意到我不能使用setVisible(false),因为它给出了java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0

是否有任何解决方法,或需要改变的东西可以帮助我实现这一目标?

【问题讨论】:

    标签: java jframe bufferedimage


    【解决方案1】:

    打包框架并将其移到显示器的可见区域之外。例如:

    frame.pack();
    frame.setLocation(-2000, -2000);
    frame.setVisible(true);
    // There you go, the frame won't be visible
    

    【讨论】:

    • 哈哈我不知道我怎么没想到。够简单,非常感谢(8分钟后接受)
    • 好的,但我没有注意到,虽然它并没有真正显示框架,但它们显然仍然在 Alt-TAB 处可见,看起来并不优雅。有什么方法可以完全摆脱框架并从中获取图像?
    • 您可以使用JWindow 代替JFrameJWindows 在任务栏和任务列表中均不可见。
    • 我暂时不需要这个,但下次我会尝试JWindows。非常感谢@icza。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多