我有这段代码:`
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和一行的屏幕截图。 我实际得到的是一个空元素的截图。
有什么建议吗?随意发布我的代码的修改版本。
提前致谢。
答案 0 :(得分:2)
您正在图片上打印contentPane
内容:contentPane
没有任何内容需要打印,它是空的。
你必须使用
frame.printAll(image.getGraphics());
旁注:您不应该从paint
覆盖JFrame
方法来执行自定义绘制。改为从paintComponent
覆盖JPanel
方法。
答案 1 :(得分:0)
我的提示是,你的框架还没准备好。我会尝试在frame.setVisible(true)
中调用EventQueue.invokeAndWait
并从主线程中获取屏幕截图。