gpt4 book ai didi

java - 如何从jframe捕获图像?(太快)

转载 作者:行者123 更新时间:2023-12-01 15:49:47 27 4
gpt4 key购买 nike

我之前已经成功地完成了此操作,但现在在多次运行程序后,失败的原因是屏幕截图太快。当 jframe 淡入时,它不会获取正确的图像。我该如何解决这个问题? Error

编辑:所以基本上我试图捕获 JFrame 内 Jpanels 的图像,但在通过从 Excel 宏中调用它来执行此操作的过程中,捕获的图像结果是上面的而不是我需要的图像。

import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class TimeTableGraphicsRunner extends JFrame
{
public TimeTableGraphicsRunner()
{
getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS));
}
public void load(TimeTablePanel pan)
{
pan.setTitle(x.getTitle(TimeTable.titleCount));
getContentPane().add(pan);
}
public void run()throws Exception
{
System.out.println("Creating image in panel");
//setSize(TimeTable.width,TimeTable.height);
getContentPane().setPreferredSize(new java.awt.Dimension(TimeTable.width,TimeTable.height));
pack();
setVisible(true);
System.out.println("Image is in panel");
grabScreenShot();
System.out.println("Cleaning up");
setVisible(false);
System.out.println("Finished");
System.exit(0);
}
private void grabScreenShot() throws Exception
{
BufferedImage image = (BufferedImage)createImage(getContentPane().getSize().width,getContentPane().getSize().height);
getContentPane().paint(image.getGraphics());
try{
ImageIO.write(image, "png", new File("C:\\Users\\"+TimeTable.user+"\\AppData\\TimeLineMacroProgram\\TimeLine.png"));
System.out.println("Image was created");
}
catch (IOException e){
System.out.println("Had trouble writing the image.");
throw e;
}
}
}

最佳答案

操作系统构建和显示框架需要时间。因此,屏幕截图 Action 是在框架完全显示之前执行的。

您可以通过多种方式解决这个问题。最好的可能是使用 ComponentListener。

public class TimeTableGraphicsRunner extends JFrame implements ComponentListener
{
public TimeTableGraphicsRunner()
{
addComponentListener(this);
... snip
}

... snip

public void componentShown(ComponentEvent e) {
grabScreenShot();
System.out.println("Cleaning up");
setVisible(false);
System.out.println("Finished");
System.exit(0);
}
}

关于java - 如何从jframe捕获图像?(太快),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6333632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com