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 ); // 在面板上绘制图片内容
}
}