日期:2014-05-20 浏览次数:21531 次
/*
* Core Java P407
**/
// 本程序是《Java核心技术 卷一:基础知识》(第八版)(中文版 机械工业出版社出版)第407页的源程序
// 我在编译的时候出了错误,但是却找不出来,望高人指点
package first;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.io.File;
import javax.swing.*;
import javax.swing.filechooser.*;
import javax.swing.filechooser.FileFilter;
/* 这里书上还导入了另一个包:
import java.util.*;
但是我在eclipse上编译的时候编译器提示说这个包从来没有用到过
*/
public class FileChooserTest {
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
ImageViewerFrame frame = new ImageViewerFrame(); // 这里报错
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("FileChooserTest");
frame.setVisible(true);
}
});
}
}
/*
* A frame that has a menu for loading an image and a display area for the loaded image
* */
class ImageViewerFrame extends DrawFrame // 这里的DrawFrame是我自己定义的一个类,主要是设置Frame
// 的宽和高
{
/**
*
*/
private static final long serialVersionUID = 1L;
private JLabel label ;
private JFileChooser chooser ;
public ImageViewerFrame()
{
// set a menu bar
JMenuBar mBar = new JMenuBar();
setJMenuBar(mBar);
JMenu menu = new JMenu("File");
mBar.add(menu);
JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new FileOpenListener());
JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.exit(0);
}
});
// use a label to display the image
label = new JLabel();
add(label);
// set up file chooser
chooser = new JFileChooser();
// accept all image files ending with .jpg .jpeg .gif
/*
final ExtensionFileFilter filter = new ExtensionFileFilter();
filter.addExtension("jpg");
filter.addExtension("jpeg");
filter.addExtension("gif");
filter.setDescription("Image files");
*/
FileNameExtensionFilter filter = new FileNameExtensionFilter("Image files", "jpg", "jpeg", "gif");
chooser.setFileFilter(filter);
chooser.setAccessory(new ImagePreviewer(chooser)); //这里报错
chooser.setFileView(new FileIconView(filter, new ImageIcon("palette.gif")));
}
private class FileOpenListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
chooser.setCurrentDirectory(new File("."));
// shoe file chooser dialog
int result = chooser.showOpenDialog(ImageViewerFrame.this);
// if image file accepted , set it as icon of the label
if(result == JFileChooser.APPROVE_OPTION)
{
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
}
}
}
/*
* A file view that display an icon for all files that match a file filter
* */
class FileIconView extends FileView
{
private FileFilter filter ;
private Icon icon ;
// constructs a FileIconView
public FileIconView(FileFilter aFilter, Icon anIcon)
{
filter = aFilter;
icon = anIcon;
}
public Icon getIcon(File f)
{
if(!f.isDirectory() && filter.accept(f))
return icon;
else
return null;
}
}
/*
* A file chooser accessory that previews images
* */
class ImagePreviewer extends JLabel
{
/**
*
*/
private static final long serialVersionUID = 1L;
// constructs an ImagePreviewer
public ImagePreviewer(JFileChooser chooser)
{
setPreferredSize(new Dimension(100, 100));
setBorder(BorderFactory.createEtchedBorder());
chooser.addPropertyChangeListener(new PropertyChangeListener()
{
public void propertyChange(PropertyChangeEvent event)
{
if(event.getPropertyName() == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY);
{
// the user has selected a new file
File f = (File) event.getNewValue(); //这里报错
if(f == null)
{
setIcon(null);
return;
}
// read the image into an icon
ImageIcon icon = new ImageIcon(f.getPath());
// if the icon is too large to fit ,scale it
if(icon.getIconWidth() > getWidth())
icon = new ImageIcon(icon.getImage().getScaledInstance(getWidth(), -1, Image.SCALE_DEFAULT));
setIcon(icon);
}
}
});
}
}