隐藏父窗口后拍摄的 Java 屏幕截图

标签 java swing screenshot

我正在尝试(并实现)获取屏幕截图:

robot = new Robot();
BufferedImage biScreen = robot.createScreenCapture(rectScreenSize);
ia.setImage(biScreen); 

这很好用,但是这个操作是从 JPanel 内的 JButton 调用的。当我单击按钮时,在调用 ScreenCapture 类之前,我尝试使用以下方法隐藏 JPanel,但没有成功:

super.getTopLevelAncestor().setVisible(false); 
super.getTopLevelAncestor().validate();
super.getTopLevelAncestor().revalidate();
super.getTopLevelAncestor().repaint();

ScreenCapture capture = new ScreenCapture("Screenshot's title", p); //create capture window with screenshot taken

如何在截屏之前隐藏我的 JPanel?目前,我正在获取桌面的屏幕截图,其中 JPanel 始终可见。

干杯!

最佳答案

如果您位于按钮操作内,则会在 EDT ( Event Dispatch Thread ) 内调用您

如果您从那里调用 setVisible(false),则必须等到窗口处理完您刚刚发送的事件 - 在此之前窗口仍然可见。

我建议您使用 SwingUtilities.invokeLater() 延迟屏幕截图,或者(如果发生得太早)启动一个延迟一半的 Timer等一下,计时器启动后进行屏幕截图。

关于隐藏父窗口后拍摄的 Java 屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35724205/

相关文章:

java - 与 Java 中的文字术语混淆

java - 完成操作后关闭 Swing 对话框

java - 我的 JFrame 闪烁

c++ - 屏幕截图忽略了一些窗口

PhoneGap 2.1 上的 iOS 截图插件

ios - 使用 'isSecureTextEntry' 阻止屏幕截图在 iOS 17 上不起作用

java - 通过电子邮件报告应用程序错误

java - 如何使JFrame与具有透明背景的图像形状相同?

java - 如何在不使用js的情况下在java中对json进行字符串化

java - 如何向 Jpanel 添加 2 列复选框