importjava.awt.Container;importjava.awt.Image;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.geom.AffineTransform;importjava.awt.image.AffineTransformOp;importjava.awt.image.BufferedImage;importjava.io.File;importjavax.imageio.ImageIO;importjavax.swing.Icon;importjavax.swing.ImageIcon;importjavax.swing.JFileChooser;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JScrollPane;public class ImageBrowser extendsJFrame {private static final long serialVersionUID = 1L;
JLabel lab= newJLabel();
JFileChooser chooser= newJFileChooser();privateString filePath;private intheight;private intwidth;private final double ratio = 0.2;publicImageBrowser() {
initial();
setTitle("Image Browser --- No image");
setSize(600, 400);
setLocation(200, 150);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}public voidinitial() {//Create Menu
JMenuBar menuBar = newJMenuBar();
setJMenuBar(menuBar);
JMenu menu1= new JMenu("File");
JMenu menu2= new JMenu("Edit");
menuBar.add(menu1);
menuBar.add(menu2);
JMenuItem openItem= new JMenuItem("Open");
menu1.add(openItem);
openItem.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent evt) {
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);int r = chooser.showOpenDialog(null);if(r ==JFileChooser.APPROVE_OPTION)
{
filePath=chooser.getSelectedFile().getPath();
setTitle("Image Browser --- " +filePath);
spread();
}
}
});
JMenuItem spreadItem= new JMenuItem("Spread");
menu2.add(spreadItem);
spreadItem.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent evt) {
spread();
}
});
JMenuItem resumeItem= new JMenuItem("Resume");
menu2.add(resumeItem);
resumeItem.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent evt) {
resume();
}
});
JMenuItem largeItem= new JMenuItem("Large");
menu2.add(largeItem);
largeItem.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent evt) {
height= (int)(height*(1+ratio));
width= (int) (width*(1+ratio));
lab.setIcon(getFixedBoundIcon());
}
});
JMenuItem reduceItem= new JMenuItem("Reduce");
menu2.add(reduceItem);
reduceItem.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent evt) {
height= (int)(height*(1-ratio));
width= (int) (width*(1-ratio));
lab.setIcon(getFixedBoundIcon());
}
});
JMenuItem exitItem= new JMenuItem("Exit");
menu1.add(exitItem);
exitItem.addActionListener(newActionListener() {public voidactionPerformed(ActionEvent evt) {
System.exit(0);
}
});
Container contentPane=getContentPane();
JScrollPane sc= newJScrollPane(lab);
contentPane.add(sc);
}public voidspread() {
File file= newFile(filePath);
Icon ic= newImageIcon(file.getAbsoluteFile().toString());int icHeight =ic.getIconHeight();int icWidth =ic.getIconWidth();
Container contentPane=getContentPane();
height=contentPane.getHeight();
width=contentPane.getWidth();if((double)height/width>=(double)icHeight/icWidth)
height= (int)(width*(double)icHeight/icWidth);elsewidth= (int)(height*(double)icWidth/icHeight);
lab.setIcon(getFixedBoundIcon());
}public voidresume() {try{
Icon ic= newImageIcon(filePath);
height=ic.getIconHeight();
width=ic.getIconWidth();
lab.setIcon(ic);
}catch(Exception e) {
e.printStackTrace();
}
}publicIcon getFixedBoundIcon(){double Ratio=0.0; //缩放比例
try{
File F= newFile(filePath);
Icon ret= newImageIcon(filePath);
BufferedImage Bi=ImageIO.read(F);if(1==1) { //((Bi.getHeight()>height) || (Bi.getWidth()>width)) {
if (Bi.getHeight()>Bi.getWidth()){
Ratio= (new Integer(height)).doubleValue() /Bi.getHeight();
}else{
Ratio= (new Integer(width)).doubleValue()/Bi.getWidth();
}
File ThF= new File(filePath+"_"+height +"_"+width);
Image Itemp=Bi.getScaledInstance (width,height,Image.SCALE_SMOOTH);
AffineTransformOp op= new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);
Itemp= op.filter(Bi, null);
ImageIO.write((BufferedImage)Itemp,"jpg", ThF);
ret= newImageIcon(ThF.getPath());
}returnret;
}catch(Exception ex) {
ex.printStackTrace();
}return null;
}public static voidmain(String[] args) {newImageBrowser();
}
}