Java 我能';我无法获得我想要的JFrame的屏幕截图
我有以下代码:`Java 我能';我无法获得我想要的JFrame的屏幕截图,java,swing,Java,Swing,我有以下代码:` import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; import javax.s
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
public class Provare extends JFrame {
private JPanel contentPane;
public static int x=100;
public static int y=100;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
x=(int) (100+(x*(Math.random()*3)));
y=(int) (100+(y*(Math.random()*3)));
Provare frame = new Provare();
frame.setVisible(true);
BufferedImage image = new BufferedImage(frame.contentPane.getWidth(),frame.contentPane.getHeight(),BufferedImage.TYPE_INT_RGB );
frame.contentPane.printAll(image.getGraphics());
ImageIO.write(image, "bmp", new File("C:/Users/Resco/Desktop/scarpe/screen.bmp") );
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Provare() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, x, y);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}
public void paint(Graphics g){
super.paint(g);
g.drawString("CIAO",(x/2),(x/2));
g.drawLine(50, 50, 100, 100);
}
}
`
我想要的是一个屏幕截图,上面有CIAO和一行文字。
我实际得到的是一个空元素的屏幕截图
有什么建议吗?请随意发布我的代码的修改版本
提前感谢。您正在打印图像上的
contentPane
内容:contentPane
没有要打印的内容,它是空的
你必须使用
frame.printAll(image.getGraphics());
侧注:您不应覆盖
JFrame
中的paint
方法来执行自定义绘制。替代JPanel
中的paintComponent
方法。我的提示是,您的帧尚未准备好。我将尝试在EventQueue.invokeAndWait
中调用frame.setVisible(true)
,然后从主线程获取屏幕截图