最近学习Swing,写了个文件选种器,可以浏览图片哦。很粗糙,不过很有意思。
首先是一个JPanel的继承类。用来设置文件选择器JFileChooser
package book.swing.jfilechooser;2

3
import javax.swing.*;4
import javax.swing.border.BevelBorder;5
import java.io.*;6
import java.awt.*;7
import java.awt.event.*;8
import java.beans.PropertyChangeEvent;9
import java.beans.PropertyChangeListener;10

11
public class ImageAccessory extends JPanel implements PropertyChangeListener{12

13
private Icon icon;14
private JLabel imageName;15
private JLabel imageLabel;16
private JScrollPane scrollpane;17
public ImageAccessory(){18
setLayout(new BorderLayout());19
icon = new ImageIcon("/home/madic/adapter.png");20
imageLabel = new JLabel(icon);21
// imagePanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));22
imageLabel.setBorder(BorderFactory.createLineBorder(Color.green));23
scrollpane = new JScrollPane(imageLabel);24
add(imageName = new JLabel("imagename"), BorderLayout.NORTH);25
add(scrollpane, BorderLayout.CENTER);26
}27
public void propertyChange(PropertyChangeEvent pe){28
if(pe.getPropertyName().equals(29
JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)){30
File f = (File)pe.getNewValue();31
if(f==null){32
return;33
}34
if(!f.isDirectory()){35
System.out.println(f.getAbsolutePath());36
imageName.setText(f.getName());37
ImageIcon ii = new ImageIcon(f.getAbsolutePath());38
Image image = ii.getImage().getScaledInstance(200, 300, Image.SCALE_DEFAULT);39
ii.setImage(image);40
icon = ii;41
imageLabel.setIcon(icon);42
imageLabel.updateUI();43
this.updateUI();44
}45
}46
}47

48
}49

下面就是一个演示JFileChooser的例子了:
package book.swing.jfilechooser;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ImageFileChooser extends JFrame{
private JButton open;
private JFrame parent;
private final JLabel statusbar;
public ImageFileChooser(){
super("ImageFileChooser");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
parent = this;
statusbar = new JLabel(
"Output of your selection will go here");
Container c = getContentPane();
c.setLayout(new FlowLayout());
open = new JButton("Open");
open.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser = new JFileChooser();
ImageAccessory ia = new ImageAccessory();
chooser.setAccessory(ia);
chooser.addPropertyChangeListener(ia);
int option = chooser.showOpenDialog(parent);
if(option == JFileChooser.APPROVE_OPTION){
statusbar.setText("You chose "
+ ((chooser.getSelectedFile() != null) ? chooser
.getSelectedFile().getName() : "nothing"));
} else {
statusbar.setText("You canceled.");
}
}
});
c.add(open);
c.add(statusbar);
setSize(200,300);
}
public static void main(String[] args){
new ImageFileChooser().setVisible(true);
}
}关键在于 需要设置JFileChooser的 accessory属性,我们在这个JPanel中来实现我们的东西。还要注意的是我们的JPanel类需要实现一个PropertyChangeListener类,这样,当你选择改变的时候,就可以在函数
propertyChange(PropertyChangeEvent ev)中实现动作了。
其中注意getScaledInstance(200, 300, Image.SCALE_DEFAULT);这个函数主要用来设置图片的大小。最后一个参数:Image.SCALE_DEFAULT是改变图像大小的算法。
要点就这么多。呵呵。试试看。

