JPanel保存为图片 是这样的:JMenuBar中有一个JMenu,JMenu中增加了一个JMenuItem,单击JMenuItem弹出JFileChooser,然后选择路径,最后把一个JPanel保存成图片,这能实现吗?知道的麻烦告诉一下,不胜感激,最好能给点代码看看! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 @Override public boolean exportOtherShapesImage(File f, DrawPanel panel) { Dimension imageSize = panel.getSize(); BufferedImage image = new BufferedImage(imageSize.width, imageSize.height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = image.createGraphics(); panel.paint(g); g.dispose(); try { ImageIO.write(image, "png", f); } catch (IOException e) { e.printStackTrace(); return false; } System.out.println("export Image -->" + f.getAbsoluteFile()); return true; } import java.awt.BorderLayout;import java.awt.EventQueue;import javax.swing.ImageIcon;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.border.EmptyBorder;import javax.swing.filechooser.FileNameExtensionFilter;import javax.swing.JToolBar;import javax.swing.JButton;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.FlowLayout;public class Application extends JFrame { /** * */ private static final long serialVersionUID = 1L; private JPanel contentPane; private JPanel picturePanel; private JLabel pictureLabel; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Application frame = new Application(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Application() { setTitle("\u56FE\u7247\u6D4F\u89C8\u5668"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 458, 304); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BorderLayout(0, 0)); { JToolBar toolBar = new JToolBar(); contentPane.add(toolBar, BorderLayout.NORTH); { JButton openButton = new JButton("\u6253\u5F00"); openButton.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent arg0) { JFileChooser chooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( "JPG & GIF Images", "jpg", "gif"); chooser.setFileFilter(filter);//设置过滤器 int returnVal = chooser.showOpenDialog(null); if(returnVal == JFileChooser.APPROVE_OPTION) { System.out.println(chooser.getSelectedFile() .getAbsolutePath()); pictureLabel.setIcon(new ImageIcon( chooser.getSelectedFile().getAbsolutePath())); } } }); toolBar.add(openButton); } } { picturePanel = new JPanel(); contentPane.add(picturePanel, BorderLayout.CENTER); picturePanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); { pictureLabel = new JLabel(""); picturePanel.add(pictureLabel); } } }} 2楼的正确又有问题,如果你那样用panel.paint(g);来设置panel的画笔,到最后你所保存的图片就是所画上去的内容,并不能够将Jpanel上添加的组建画上去,public class PanelImage extends JPanel{ protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawLine(10, 10, 50, 50); } public boolean exportOtherShapesImage(File f, JPanel panel) { Dimension imageSize = panel.getSize(); BufferedImage image = new BufferedImage(imageSize.width, imageSize.height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = image.createGraphics(); panel.paint(g); g.dispose(); try { ImageIO.write(image, "png", f); } catch (IOException e) { e.printStackTrace(); return false; } System.out.println("export Image -->" + f.getAbsoluteFile()); return true; } public static void main(String[] args) { PanelImage p = new PanelImage(); p.add(new JLabel("this is my Label")); p.setSize(500, 500); p.setVisible(true); p.exportOtherShapesImage(new File("d:/1.png"), p); JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setBounds(100, 100, 500, 500); f.add(p); f.setVisible(true); }}运行下就知道保存的只是用g.drawLine方法的图片将添加组建画上去貌似还没有什么方案能行,既然要保存成图片,应该这个JPanel内容都应该用画笔将其画上去 我就是用2楼的办法,也能将JPanel上的组件保存到图片中 public boolean exportOtherShapesImage(File f, DrawPanel panel) { Dimension imageSize = panel.getSize(); BufferedImage image = new BufferedImage(imageSize.width, imageSize.height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = image.createGraphics(); panel.paint(g); g.dispose(); try { ImageIO.write(image, "png", f); } catch (IOException e) { e.printStackTrace(); return false; } System.out.println("export Image -->" + f.getAbsoluteFile()); return true; } private JMenuItem getJMenuItemSaveAs() { if (jMenuItemSaveAs == null) { jMenuItemSaveAs = new JMenuItem("另存为"); jMenuItemSaveAs.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ JFileChooser fileChooser=new JFileChooser(); fileChooser.setSelectedFile(new File("default.png")); int returnVal = fileChooser.showSaveDialog(jMenuItemSaveAs); if(returnVal==JFileChooser.APPROVE_OPTION){ Dimension imageSize = jPanelTopologyDiscovery.getSize(); BufferedImage image = new BufferedImage(imageSize.width, imageSize.height, BufferedImage.TYPE_3BYTE_BGR); Graphics2D g = image.createGraphics(); jPanelTopologyDiscovery.paint(g); g.dispose(); File topologyImage=fileChooser.getSelectedFile(); try { if(!topologyImage.exists()){ ImageIO.write(image, "png", topologyImage); JOptionPane notice=new JOptionPane (); notice.showMessageDialog(null, "恭喜,图片保存成功!","保存成功",JOptionPane.INFORMATION_MESSAGE); }else{ int returnValue=0; JOptionPane notice=new JOptionPane (); returnValue=notice.showConfirmDialog(fileChooser, "文件"+topologyImage.getName()+"已经存在,是否覆盖?", "保存文件",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(returnValue==JOptionPane.YES_OPTION){ ImageIO.write(image, "png", topologyImage); //JOptionPane notice=new JOptionPane (); notice.showMessageDialog(null, "恭喜,图片保存成功!","保存成功",JOptionPane.INFORMATION_MESSAGE); }else{ actionPerformed(e); } } } catch (IOException e1) { e1.printStackTrace(); } } } }); } return jMenuItemSaveAs; } JAVA运行环境问题 ??? java留言板 如何在jComboBox中添加日历控件 救命啊~!~!没办法活了。。 问一个关于排序的问题 JComboBox的addItem方法报错,请高手帮忙,在线等,立即给分 如何让JList动态显示? 关于JVM的问题 急!菜鸟新手MM求救!画出正弦,余弦,正切,余切的图形 关于java.sql.connection类的问题 MyEclipse和jdk的相关问题!! 弱弱提问 《thinging in Java》的程序有点不明白?
public boolean exportOtherShapesImage(File f, DrawPanel panel) {
Dimension imageSize = panel.getSize();
BufferedImage image = new BufferedImage(imageSize.width,
imageSize.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
panel.paint(g);
g.dispose();
try {
ImageIO.write(image, "png", f);
} catch (IOException e) {
e.printStackTrace();
return false;
}
System.out.println("export Image -->" + f.getAbsoluteFile());
return true;
}
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JToolBar;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.FlowLayout;public class Application extends JFrame { /**
*
*/
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JPanel picturePanel;
private JLabel pictureLabel; /**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Application frame = new Application();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the frame.
*/
public Application() {
setTitle("\u56FE\u7247\u6D4F\u89C8\u5668");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 458, 304);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
{
JToolBar toolBar = new JToolBar();
contentPane.add(toolBar, BorderLayout.NORTH);
{
JButton openButton = new JButton("\u6253\u5F00");
openButton.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent arg0) {
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);//设置过滤器
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println(chooser.getSelectedFile()
.getAbsolutePath());
pictureLabel.setIcon(new ImageIcon(
chooser.getSelectedFile().getAbsolutePath()));
}
}
});
toolBar.add(openButton);
}
}
{
picturePanel = new JPanel();
contentPane.add(picturePanel, BorderLayout.CENTER);
picturePanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
{
pictureLabel = new JLabel("");
picturePanel.add(pictureLabel);
}
}
}
}
{
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(10, 10, 50, 50);
} public boolean exportOtherShapesImage(File f, JPanel panel)
{
Dimension imageSize = panel.getSize();
BufferedImage image = new BufferedImage(imageSize.width,
imageSize.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
panel.paint(g);
g.dispose();
try
{
ImageIO.write(image, "png", f);
}
catch (IOException e)
{
e.printStackTrace();
return false;
}
System.out.println("export Image -->" + f.getAbsoluteFile());
return true;
} public static void main(String[] args)
{
PanelImage p = new PanelImage();
p.add(new JLabel("this is my Label"));
p.setSize(500, 500);
p.setVisible(true);
p.exportOtherShapesImage(new File("d:/1.png"), p); JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBounds(100, 100, 500, 500);
f.add(p);
f.setVisible(true);
}
}运行下就知道保存的只是用g.drawLine方法的图片将添加组建画上去貌似还没有什么方案能行,既然要保存成图片,应该这个JPanel内容都应该用画笔将其画上去
Dimension imageSize = panel.getSize();
BufferedImage image = new BufferedImage(imageSize.width,
imageSize.height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = image.createGraphics();
panel.paint(g);
g.dispose();
try {
ImageIO.write(image, "png", f);
} catch (IOException e) {
e.printStackTrace();
return false;
}
System.out.println("export Image -->" + f.getAbsoluteFile());
return true;
}
private JMenuItem getJMenuItemSaveAs() {
if (jMenuItemSaveAs == null) {
jMenuItemSaveAs = new JMenuItem("另存为");
jMenuItemSaveAs.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser fileChooser=new JFileChooser();
fileChooser.setSelectedFile(new File("default.png"));
int returnVal = fileChooser.showSaveDialog(jMenuItemSaveAs);
if(returnVal==JFileChooser.APPROVE_OPTION){
Dimension imageSize = jPanelTopologyDiscovery.getSize();
BufferedImage image = new BufferedImage(imageSize.width,
imageSize.height, BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g = image.createGraphics();
jPanelTopologyDiscovery.paint(g);
g.dispose();
File topologyImage=fileChooser.getSelectedFile();
try {
if(!topologyImage.exists()){
ImageIO.write(image, "png", topologyImage);
JOptionPane notice=new JOptionPane ();
notice.showMessageDialog(null, "恭喜,图片保存成功!","保存成功",JOptionPane.INFORMATION_MESSAGE);
}else{
int returnValue=0;
JOptionPane notice=new JOptionPane ();
returnValue=notice.showConfirmDialog(fileChooser, "文件"+topologyImage.getName()+"已经存在,是否覆盖?", "保存文件",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if(returnValue==JOptionPane.YES_OPTION){
ImageIO.write(image, "png", topologyImage);
//JOptionPane notice=new JOptionPane ();
notice.showMessageDialog(null, "恭喜,图片保存成功!","保存成功",JOptionPane.INFORMATION_MESSAGE);
}else{
actionPerformed(e);
}
}
} catch (IOException e1) {
e1.printStackTrace();
} }
}
});
}
return jMenuItemSaveAs;
}