java图像界面开发简单实例
ImageIO,JFileChooser,JMenu,JPanel的应用,JLabel,JFileChooser,JMenu应用例子中图片是通过设置JLabel的Icon属性来实现图片浏览的,本例则通过JPanel,利用ImageIO来读取相应文件,显示图片,代码如下:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
/**
* ImageIO的简单应用实例
* @author 左杰 jdk 5.0
*
*/
public class Example7Frame extends JFrame {
private static final long serialVersionUID = 1L;
private JLabel label;
private JFileChooser fileChooser;
private ImagePanel panel;
public Example7Frame() {
setTitle("图片浏览");//设置窗体标题
setSize(500, 400);//设置窗体大小
//创建标签对象
label = new JLabel();
add(label);//在窗体上添加标签
//创建文件选择器对象
fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File("."));//设置默认路径为当前目录
//创建菜单栏
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);//在窗体上添加菜单栏
//添加菜单项
JMenu menu = new JMenu("文件");
menuBar.add(menu);//在菜单栏中添加菜单项
//添加“打开”子菜单项
JMenuItem openItem = new JMenuItem("打开");
menu.add(openItem);//在菜单项中添加子菜单项
panel = new ImagePanel();//创建显示图片面板
add(panel);//窗体中添加图片面板
//为“打开”菜单添加事件及监听
openItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
//显示文件选择器
int result = fileChooser.showOpenDialog(null);
//如果选择文件则显示在标签中
if(result==JFileChooser.APPROVE_OPTION){
String name = fileChooser.getSelectedFile().getPath();//获取选择文件的路径
panel.setImage(name);//设置图片路径
panel.repaint();//更新面板
}
}
});
//添加“退出”子菜单项
JMenuItem exitItem = new JMenuItem("退出");
menu.add(exitItem);//在菜单项中添加子菜单项
//为“退出”菜单添加事件及监听
exitItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});
}
public static void main(String[] args) {
Example7Frame frame = new Example7Frame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
/**
* 创建用于显示图片的面板
*/
class ImagePanel extends JPanel {
private static final long serialVersionUID = 1L;
private Image image;
private int showWdith;
private int showHeight;
public void setImage(String fileName) {
// 读取图片文件
try {
image = ImageIO.read(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image == null)
return;
//获取图像文件的宽度和高度
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
//获取面板的高度和宽度
int width = getWidth();
int height = getHeight();
//图片最大显示为面板的大小
if(imageWidth>width){
this.showWdith = width;
}else{
this.showWdith = imageWidth;
}
if(imageHeight>height){
this.showHeight = height;
}else{
this.showHeight = imageHeight;
}
g.drawImage(image, 0, 0, showWdith, showHeight, null, null);//在面板上绘制图片内容
}
}
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
/**
* ImageIO的简单应用实例
* @author 左杰 jdk 5.0
*
*/
public class Example7Frame extends JFrame {
private static final long serialVersionUID = 1L;
private JLabel label;
private JFileChooser fileChooser;
private ImagePanel panel;
public Example7Frame() {
setTitle("图片浏览");//设置窗体标题
setSize(500, 400);//设置窗体大小
//创建标签对象
label = new JLabel();
add(label);//在窗体上添加标签
//创建文件选择器对象
fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File("."));//设置默认路径为当前目录
//创建菜单栏
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);//在窗体上添加菜单栏
//添加菜单项
JMenu menu = new JMenu("文件");
menuBar.add(menu);//在菜单栏中添加菜单项
//添加“打开”子菜单项
JMenuItem openItem = new JMenuItem("打开");
menu.add(openItem);//在菜单项中添加子菜单项
panel = new ImagePanel();//创建显示图片面板
add(panel);//窗体中添加图片面板
//为“打开”菜单添加事件及监听
openItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
//显示文件选择器
int result = fileChooser.showOpenDialog(null);
//如果选择文件则显示在标签中
if(result==JFileChooser.APPROVE_OPTION){
String name = fileChooser.getSelectedFile().getPath();//获取选择文件的路径
panel.setImage(name);//设置图片路径
panel.repaint();//更新面板
}
}
});
//添加“退出”子菜单项
JMenuItem exitItem = new JMenuItem("退出");
menu.add(exitItem);//在菜单项中添加子菜单项
//为“退出”菜单添加事件及监听
exitItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});
}
public static void main(String[] args) {
Example7Frame frame = new Example7Frame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
/**
* 创建用于显示图片的面板
*/
class ImagePanel extends JPanel {
private static final long serialVersionUID = 1L;
private Image image;
private int showWdith;
private int showHeight;
public void setImage(String fileName) {
// 读取图片文件
try {
image = ImageIO.read(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image == null)
return;
//获取图像文件的宽度和高度
int imageWidth = image.getWidth(this);
int imageHeight = image.getHeight(this);
//获取面板的高度和宽度
int width = getWidth();
int height = getHeight();
//图片最大显示为面板的大小
if(imageWidth>width){
this.showWdith = width;
}else{
this.showWdith = imageWidth;
}
if(imageHeight>height){
this.showHeight = height;
}else{
this.showHeight = imageHeight;
}
g.drawImage(image, 0, 0, showWdith, showHeight, null, null);//在面板上绘制图片内容
}
}