本文讲述了Java教程——java保存JFrame窗口的内容为图片!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:
java保存JFrame窗口的内容为图片,考虑到截图保存窗口如果被其他置顶窗口挡住,或者窗口在屏幕外的话无效了,所以采用如下方法。
jframe转换为图片1(这个可用)
public void savePic(JFrame jf){
//得到窗口内容面板
Container content=jf.getContentPane();
//创建缓冲图片对象
BufferedImage img=new BufferedImage(
jf.getWidth(),jf.getHeight(),BufferedImage.TYPE_INT_RGB);
//得到图形对象
Graphics2D g2d = img.createGraphics();
//将窗口内容面板输出到图形对象中
content.printAll(g2d);
//保存为图片
File f=new File("saveScreen.jpg");
try {
ImageIO.write(img, "jpg", f);
} catch (IOException e) {
e.printStackTrace();
}
//释放图形对象
g2d.dispose();
}
jframe转换为图片2(这个会抛出异常)
public class TestSaveFrame extends JFrame {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}
new TestSaveFrame();
}
});
}
public TestSaveFrame() {
setTitle("Save me");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
BackgroundPane pane = new BackgroundPane();
pane.setLayout(new GridBagLayout());
JLabel label = new JLabel("I'm sitting on top");
label.setFont(label.getFont().deriveFont(Font.BOLD, 24f));
label.setForeground(Color.WHITE);
pane.add(label);
add(pane);
pack();
setLocationRelativeTo(null);
setVisible(true);
pane.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
Container content = getContentPane();
BufferedImage img = new BufferedImage(content.getWidth(), content.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = img.createGraphics();
content.printAll(g2d);
g2d.dispose();
try {
ImageIO.write(img, "png", new File("C:/PrintMe.png"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
}
public class BackgroundPane extends JPanel {
private Image background = null;
public BackgroundPane() {
try {
background = ImageIO.read(getClass().getResource("/MT015.jpg"));
} catch (IOException ex) {
ex.printStackTrace();
}
}
@Override
public Dimension getPreferredSize() {
return background == null ? new Dimension(200, 200) : new Dimension(background.getWidth(this), background.getHeight(this));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (background != null) {
int x = (getWidth() - background.getWidth(this)) / 2;
int y = (getHeight() - background.getHeight(this)) / 2;
g.drawImage(background, x, y, this);
}
}
}
}
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Java编程语言,推荐大家关注一个微信公众号:Java圈子。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Java入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!