import java.awt.*;
import java.awt.event.*;
import java.awt.geom.AffineTransform;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.filechooser.FileNameExtensionFilter;public class PicViewer{
public static void main(String[] args){
try {
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if ("Windows Classic".equals(info.getName())) {
            UIManager.setLookAndFeel(info.getClassName());
            break;
        }
    }
} catch (Exception e) {
    // If Windows is not available, you can set the GUI to another look and feel.
}
EventQueue.invokeLater(new Runnable(){
public void run(){
PicFrame frame = new PicFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}class PicFrame extends JFrame{
public PicFrame(){
setTitle("PicViewer"); Toolkit kit = Toolkit.getDefaultToolkit();
      Image img = kit.getImage(getClass().getResource("icon.png"));
      setIconImage(img);
      Dimension screenSize = kit.getScreenSize();
    setSize(screenSize.width * 5 / 13, screenSize.height * 6 / 13);
    
    JMenuItem openItem = new JMenuItem("打开");
      openItem.setAccelerator(KeyStroke.getKeyStroke("ctrl O"));
      openItem.addActionListener(new OpenFile());
     
    //add menu bar
      JMenuBar menuBar = new JMenuBar();
      setJMenuBar(menuBar);
      
      JMenu fileMenu = new JMenu("文件");
      menuBar.add(fileMenu);
      fileMenu.add(openItem);
           
      
      chooser = new JFileChooser();
    FileNameExtensionFilter filter = new FileNameExtensionFilter("图象文件(*.JPG;*.JPEG*.GIF;*.PNG;)", "jpg", "jpeg", "gif", "png");
    chooser.setFileFilter(filter);
    
}

private class OpenFile extends AbstractAction{
public void actionPerformed(ActionEvent e) {
chooser.setCurrentDirectory(new File("."));
int result = chooser.showOpenDialog(PicFrame.this);
if(result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
PicComponent component = new PicComponent(name);
add(component, BorderLayout.CENTER );
validate();
}
}     
    
}

class PicComponent extends JComponent{
public PicComponent(String name){
try{
image = ImageIO.read(new File(name));
        }
catch (IOException e1){
e1.printStackTrace();
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
     Graphics2D g2d = (Graphics2D)g;
     int x = (getWidth() - image.getWidth(this)) / 2;
     int y = (getHeight() - image.getHeight(this)) / 2;
     g2d.drawImage(image, x, y, this);
}
}
private JFileChooser chooser;
private Image image;
}问题是,打开第一张图片,然后放大框架,没有问题。打开第二张图片的时候,然后再放大框架,会在框架中绘制两个一样的图像。
因为想把图像绘制在框架中央,就出现这个问题!