注释很详细,直接上代码
package swing21_30;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class swing_test_29 {
//创建窗口对象
JFrame jFrame= new JFrame("测试JFileChooser");
//创建文件对话框
JFileChooser jFileChooser = new JFileChooser(".");
//创建菜单条
JMenuBar jMenuBar = new JMenuBar();
//创建菜单
JMenu jMenu = new JMenu("文件");
//创建菜单项
JMenuItem open = new JMenuItem(new AbstractAction("打开"){//继承AbstractAction
//重写actionPerformed方法
@Override
public void actionPerformed(ActionEvent e) {
//调用showOpenDialog方法
jFileChooser.showOpenDialog(jFrame);
//获取用户选择的文件
File imageFile = jFileChooser.getSelectedFile();
try {
//读取图片
image = ImageIO.read(imageFile);
//刷新界面
drawArea.repaint();
} catch (IOException e1) {
//打印异常信息
e1.printStackTrace();
}
}
});
//另存为菜单项
JMenuItem save = new JMenuItem(new AbstractAction("另存为"){
//重写actionPerformed方法
@Override
public void actionPerformed(ActionEvent e) {
//设置文件选择模式,模式为单选
jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
//调用showSaveDialog方法
jFileChooser.showSaveDialog(jFrame);
//获取用户选择的文件夹
File dir = jFileChooser.getSelectedFile();
try {
//将图片另存为jpg格式
ImageIO.write(image,"jpeg",new File(dir,"a.jpg"));
} catch (Exception e1) {
//打印异常信息
e1.printStackTrace();
}
}
});
//用来记录用户选择的图片
BufferedImage image;
//显示图片
class MyCanvas extends JPanel{
//重写paint方法
@Override
public void paint(Graphics g) {
//绘制图片
if (image!=null){
//绘制图片
g.drawImage(image,0,0,null);
}
}
}
//用来显示图片的面板
JPanel drawArea = new MyCanvas();
//初始化方法
public void init(){
//设置图片显示区域大小
drawArea.setPreferredSize(new Dimension(500,300));
//将面板添加到窗口中
jFrame.add(drawArea);
//组装并设置菜单条
jMenu.add(open);
jMenu.add(save);
jMenuBar.add(jMenu);
jFrame.setJMenuBar(jMenuBar);
//设置窗口关闭方式
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口大小
jFrame.pack();
jFrame.setVisible(true);
}
public static void main(String[] args) {
//启动程序
new swing_test_29().init();
}
}
效果演示:
随意打开一张图片