?? imageviewer.java
字號:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.beans.*;
import java.util.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileView;
/**
* Description:
* <br/>Copyright (C), 2005-2008, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee kongyeeku@163.com
* @version 1.0
*/
public class ImageViewer
{
final int PREVIEW_SIZE = 100;
JFrame jf = new JFrame("簡單圖片查看器");
JMenuBar menuBar = new JMenuBar();
//該label用于顯示圖片
JLabel label = new JLabel();
//以當前路徑創建文件選擇器
JFileChooser chooser = new JFileChooser(".");
JLabel accessory = new JLabel();
ExtensionFileFilter filter = new ExtensionFileFilter();
public void init()
{
//-------------------下面開始初始化JFileChooser的相關屬性-----------------
// 創建一個FileFilter
filter.addExtension("jpg");
filter.addExtension("jpeg");
filter.addExtension("gif");
filter.addExtension("png");
filter.setDescription("圖片文件(*.jpg,*.jpeg,*.gif,*.png)");
chooser.addChoosableFileFilter(filter);
//禁止“文件類型”下拉列表中顯示“所有文件”選項。
chooser.setAcceptAllFileFilterUsed(false);
//為文件選擇器指定自定義的FileView對象
//為文件選擇器指定一個預覽圖片的附件組件
chooser.setAccessory(accessory);
//設置預覽圖片組件的大小和邊框
accessory.setPreferredSize(new Dimension(PREVIEW_SIZE, PREVIEW_SIZE));
accessory.setBorder(BorderFactory.createEtchedBorder());
//用于檢測被選擇文件的改變事件
chooser.addPropertyChangeListener(new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent event)
{
//JFileChooser的被選文件已經發生了改變
if (event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
{
//獲取用戶選擇的新文件
File f = (File) event.getNewValue();
if (f == null)
{
accessory.setIcon(null);
return;
}
//將所文件讀入ImageIcon對象中
ImageIcon icon = new ImageIcon(f.getPath());
//如果圖像太大,則縮小它
if(icon.getIconWidth() > PREVIEW_SIZE)
{
icon = new ImageIcon(icon.getImage()
.getScaledInstance(PREVIEW_SIZE, -1, Image.SCALE_DEFAULT));
}
//改變accessory Label的圖標
accessory.setIcon(icon);
}
}
});
//----------下面代碼開始為該窗口安裝菜單------------
JMenu menu = new JMenu("文件");
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("打開");
menu.add(openItem);
//單擊openItem菜單項顯示“打開文件”的對話框
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
//設置文件對話框的當前路徑
//chooser.setCurrentDirectory(new File("."));
//顯示文件對話框
int result = chooser.showDialog(jf , "打開圖片文件");
//如果用戶選擇了APPROVE(贊同)按鈕,即打開,保存及其等效按鈕
if(result == JFileChooser.APPROVE_OPTION)
{
String name = chooser.getSelectedFile().getPath();
//顯示指定圖片
label.setIcon(new ImageIcon(name));
}
}
});
JMenuItem exitItem = new JMenuItem("退出");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
jf.setJMenuBar(menuBar);
//添加用于顯示圖片的JLabel組件。
jf.add(new JScrollPane(label));
jf.setSize(500, 400);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args)
{
new ImageViewer().init();
}
}
//創建FileFilter的子類,用以實現文件過濾功能
class ExtensionFileFilter extends FileFilter
{
private String description = "";
private ArrayList<String> extensions = new ArrayList<String>();
//自定義方法,用于添加文件擴展名
public void addExtension(String extension)
{
if (!extension.startsWith("."))
{
extension = "." + extension;
extensions.add(extension.toLowerCase());
}
}
//用于設置該文件過濾器的描述文本
public void setDescription(String aDescription)
{
description = aDescription;
}
//繼承FileFilter類必須實現的抽象方法,返回該文件過濾器的描述文本
public String getDescription()
{
return description;
}
//繼承FileFilter類必須實現的抽象方法,判斷該文件過濾器是否接受該文件
public boolean accept(File f)
{
//如果該文件是路徑,接受該文件
if (f.isDirectory()) return true;
//將文件名轉為小寫(全部轉為小寫后比較,用于忽略文件名大小寫)
String name = f.getName().toLowerCase();
//遍歷所有可接受的擴展名,如果擴展名相同,該文件就可接受。
for (String extension : extensions)
{
if (name.endsWith(extension))
{
return true;
}
}
return false;
}
}
//自定義一個FileView類,用于為指定類型的指定圖標
class FileIconView extends FileView
{
private FileFilter filter;
public FileIconView(FileFilter filter)
{
this.filter = filter;
}
//如果文件不是目錄,并且不是
public Icon getIcon(File f)
{
if (!f.isDirectory() && filter.accept(f))
{
return new ImageIcon("ico/pict.png");
}
else if (f.isDirectory())
{
//獲取所有根路徑
File[] fList = File.listRoots();
for (File tmp : fList)
{
//如果該路徑是根路徑
if (tmp.equals(f))
{
return new ImageIcon("ico/dsk.png");
}
}
return new ImageIcon("ico/folder.png");
}
//使用默認圖標
else
{
return null;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -