WEB开发网
开发学院WEB开发Jsp 用java编写一个简单的电子相片查看器 阅读

用java编写一个简单的电子相片查看器

 2009-11-24 21:01:36 来源:WEB开发网   
核心提示:import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.UIManager;/* * To change this template, choose Tools | Templates * and open the templa
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.UIManager;

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Maoris
*/
public class PowerSee {

  public static void main(String args[]) {
    try {
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e1) {
      e1.PRintStackTrace();
    }
    MainFrame mainFrame = new MainFrame();
    mainFrame.setIconImage(new ImageIcon("icon/powerSee.png").getImage());
    mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    mainFrame.setSize(700, 500);
    mainFrame.setVisible(true);
    mainFrame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
  }
}

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Maoris
*/
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;
import java.io.*;
import javax.swing.filechooser.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.awt.event.MouseAdapter;
import java.util.StringTokenizer;
import java.awt.event.MouseAdapter.*;
import java.awt.event.MouseEvent;

class MainFrame extends JFrame implements TreeSelectionListener {

  public JPanel viewPanel = new JPanel(new GridLayout(0, 4, 20, 20));
  public JPanel includeviewPanel = new JPanel(new BorderLayout());
  public JLabel label = new JLabel("选定:");
  public JLabel stateLabel = new JLabel("未选定");
  public JPanel statePanel = new JPanel();
  FileNameExtensionFilter imageFilter = new FileNameExtensionFilter(null, "jpeg", "jpg", "png", "gif");
  JFileChooser imageChooser = new JFileChooser();
  public File copyFile;
  public File cutFile;
  public File directFile;
  public File[] imagePath;
  public JScrollPane scrollPane;
  public static JLabel previewLabel;
  public static JPanel previewPanel;
  public JPanel toolPanel;
  public JPanel treePanel;
  public JComboBox style;

  public MainFrame() {
    super("PowerSee 电子像片管理程序");
    viewPanel.setBackground(Color.white);
    treePanel = createTreePanel();
    previewLabel = new JLabel();
    previewPanel = new JPanel(new BorderLayout());
    previewLabel.setHorizontalAlignment(JLabel.CENTER);
    previewPanel.add(previewLabel, BorderLayout.CENTER);
    previewPanel.setBorder(BorderFactory.createTitledBorder("预览"));
    jsplitPane vSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treePanel, previewPanel);
    Dimension screen = getToolkit().getScreenSize();
    vSplitPane.setOneTouchExpandable(false);
    vSplitPane.setDividerLocation((int)(screen.height * 0.52));
    includeviewPanel.add(scrollPane = new JScrollPane(viewPanel), BorderLayout.CENTER);
    includeviewPanel.add(statePanel, BorderLayout.SOUTH);
    statePanel.add(label);
    statePanel.add(stateLabel);
    JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, vSplitPane, includeviewPanel);
    splitPane.setDividerLocation(250);
    splitPane.setOneTouchExpandable(true);
    getContentPane().add(splitPane, BorderLayout.CENTER);
    JMenuBar menuBar = myMenuBar();
    setJMenuBar(menuBar);
    JToolBar toolBar = myToolBar();
    add(toolBar, BorderLayout.NORTH);
  }

  private JPanel createTreePanel() {
    JPanel aTreePanel = new JPanel();
    SoureTree tree = new SoureTree();
    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    tree.addTreeSelectionListener(this);
    aTreePanel.setLayout(new BorderLayout());
    aTreePanel.add(new JScrollPane(tree), BorderLayout.CENTER);
    aTreePanel.setBorder(BorderFactory.createTitledBorder("资源管理器"));
    return aTreePanel;
  }

  public void valueChanged(TreeSelectionEvent e) {
    previewLabel.setIcon(new ImageIcon());
    previewPanel.repaint();
    previewPanel.validate();
    int imageFileNumber = 0;
    SoureTree tree = (SoureTree) e.getSource();
    imageChooser.addChoosableFileFilter(imageFilter);
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
    if (!node.isLeaf()) {
      directFile = new File(node.getUserObject().toString());
      File[] filePath = directFile.listFiles();
      imageFileNumber = filePath.length;
      for (int i = 0; i < filePath.length; i++) {
        if (!imageFilter.accept(filePath[i]) || filePath[i].isDirectory()) {
          filePath[i] = null;
          --imageFileNumber;
        }
      }
      if (imageFileNumber != 0) {
        imagePath = new File[imageFileNumber];
        imageFileNumber = 0;
        for (int i = 0; i < filePath.length; i++) {
          if (filePath[i] != null) {
            imagePath[imageFileNumber++] = filePath[i];
          }
        }
        imageFileNumber--;
        Runnable loadImage = new LoadImage(viewPanel, scrollPane, imagePath, stateLabel);
        Thread thread = new Thread(loadImage);
        thread.start();
        stateLabel.setText("未选定");

      } else {
        viewPanel.removeAll();
        viewPanel.repaint();
        viewPanel.validate();
        imagePath = null;
        stateLabel.setText("未选定");
      }
    } else {
      directFile = null;
      imagePath = null;
    }
  }

  public JMenuBar myMenuBar() {
    JMenuBar menuBar = new JMenuBar();
    JMenu file = new JMenu("文件(F)", true);
    file.setMnemonic('F');
    JMenu edit = new JMenu("编辑(E)", true);
    edit.setMnemonic('E');
    JMenu help = new JMenu("帮助(H)", true);
    help.setMnemonic('H');
    JMenuItem open = new JMenuItem("打开(O)", 'O');
    open.setMnemonic('O');
    open.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        openFile();
      }
    });
    JMenuItem close = new JMenuItem("退出(C)", 'C');
    close.setMnemonic('C');
    close.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    });
    file.add(open);
    file.add(close);
    JMenuItem cut = new JMenuItem("剪切(T)", 'T');
    cut.setMnemonic('T');
    cut.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if ((stateLabel.getText()).equals("未选定")) {
          JOptionPane.showMessageDialog(null, "未选定文件");
        } else {
          cut(stateLabel.getText());
        }
      }
    });
    JMenuItem copy = new JMenuItem("复制(Y)", 'Y');
    copy.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if ((stateLabel.getText()).equals("未选定")) {
          JOptionPane.showMessageDialog(null, "未选定文件");
        } else {
          copy(stateLabel.getText());
        }
      }
    });
    copy.setMnemonic('Y');
    JMenuItem paste = new JMenuItem("粘贴(P)", 'P');
    paste.setMnemonic('P');
    paste.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if (copyFile == null && cutFile == null) {
          JOptionPane.showMessageDialog(null, "未复制文件");
        } else if (copyFile != null) {
          try {
            paste(copyFile, directFile);
          } catch (Exception ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
          }
        } else {
          try {
            paste(cutFile, directFile);
            cutFile.delete();

          } catch (Exception ex) {
            System.out.println("删除失败晕");
          }
          cutFile = null;
        }
      }
    });
    JMenuItem rename = new JMenuItem("重命名(R)", 'R');
    rename.setMnemonic('R');
    rename.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if ((stateLabel.getText()).equals("未选定")) {
          JOptionPane.showMessageDialog(null, "未选定文件");
        } else {
          rename();

        }
      }
    });
    JMenuItem allrename = new JMenuItem("批量重命名(A)", 'A');
    allrename.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        renameAll();
      }
    });
    allrename.setMnemonic('A');
    edit.add(cut);
    edit.add(copy);
    edit.add(paste);
    edit.add(rename);
    edit.add(allrename);
    JMenuItem about = new JMenuItem("关于(A)", 'A');
    about.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null,
            "PowerSee 电子像片查看器", "关于",
            JOptionPane.INFORMATION_MESSAGE);
      }
    });
    about.setMnemonic('A');
    JMenuItem update = new JMenuItem("更新(U)", 'U');
    update.setMnemonic('U');
    update.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "服务器创建中,期待···",
            "在线更新", JOptionPane.INFORMATION_MESSAGE);
      }
    });
    JMenuItem register = new JMenuItem("注册(R)", 'R');
    register.setMnemonic('R');
    register.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null,
            "此软件暂为免费软件,欢迎使用O(∩_∩)O", "注册",
            JOptionPane.INFORMATION_MESSAGE);
      }
    });
    help.add(register);
    help.add(update);
    help.add(about);
    menuBar.add(file);
    menuBar.add(edit);
    menuBar.add(help);
    return menuBar;
  }

  public void openFile() {
    imageChooser.setFileFilter(imageFilter);
    int i = imageChooser.showOpenDialog(this);
    if (i == JFileChooser.APPROVE_OPTION) {
      File selectedFile = imageChooser.getSelectedFile();
      if (imageChooser.getSelectedFile() != null) {
        String imageFile = selectedFile.toString();
        ImageFrame imageFrame = new ImageFrame(imageFile);
      }
      selectedFile = null;
    }
  }

  public JToolBar myToolBar() {
    JToolBar toolBar = new JToolBar();
    JButton open = new JButton(new ImageIcon("icon/openIcon.png"));
    open.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        openFile();
      }
    });
    JButton cut = new JButton(new ImageIcon("icon/cutIcon.png"));
    cut.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if ((stateLabel.getText()).equals("未选定")) {
          JOptionPane.showMessageDialog(null, "未选定文件");
        } else {
          cut(stateLabel.getText());
        }
      }
    });
    JButton copy = new JButton(new ImageIcon("icon/copyIcon.png"));
    copy.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if ((stateLabel.getText()).equals("未选定")) {
          JOptionPane.showMessageDialog(null, "未选定文件");
        } else {
          copy(stateLabel.getText());
        }
      }
    });
    JButton paste = new JButton(new ImageIcon("icon/pasteIcon.png"));
    paste.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if (copyFile == null && cutFile == null) {
          JOptionPane.showMessageDialog(null, "未复制文件");
        } else if (copyFile != null) {
          try {
            paste(copyFile, directFile);
          } catch (Exception ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
          }
        } else {
          try {
            paste(cutFile, directFile);
            cutFile.delete();
          } catch (Exception ex) {
            System.out.println("Oh no!");
          }
          cutFile = null;
        }
      }
    });
    JButton del = new JButton(new ImageIcon("icon/delIcon.png"));
    del.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if (stateLabel.getText().equals("未选定")) {
          JOptionPane.showMessageDialog(null, "未选定文件");
        } else {
          delete();
        }
      }
    });
    JButton rename = new JButton(new ImageIcon("icon/renameIcon.png"));
    rename.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if ((stateLabel.getText()).equals("未选定")) {
          JOptionPane.showMessageDialog(null, "未选定文件");
        } else {
          rename();
        }
      }
    });
    toolPanel = new JPanel();
    toolPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
    JLabel sty = new JLabel("界面风格:");
    style = new JComboBox(new Object[]{"白色简洁", "黑色幽默"});
    style.setForeground(Color.red);
    style.setSelectedItem("经典风格");
    style.addItemListener(new ItemListener() {

      public void itemStateChanged(ItemEvent e) {
        setStyle(style.getSelectedIndex());
      }
    });
    toolPanel.add(sty);
    toolPanel.add(style);
    toolPanel.setBackground(Color.LIGHT_GRAY);
    toolBar.add(open);
    toolBar.add(cut);
    toolBar.add(copy);
    toolBar.add(paste);
    toolBar.add(del);
    toolBar.add(rename);
    toolBar.add(toolPanel);
    return toolBar;
  }

  public void setStyle(int i) {
    if (i == 0) {
      viewPanel.setBackground(Color.white);
      treePanel.setBackground(Color.white);
      previewPanel.setBackground(Color.white);
      statePanel.setBackground(Color.white);
      statePanel.repaint();
      statePanel.validate();
      viewPanel.repaint();
      viewPanel.validate();
      treePanel.repaint();
      treePanel.validate();
      previewPanel.repaint();
      previewPanel.validate();
    }
    if (i == 1) {
      viewPanel.setBackground(Color.BLACK);
      treePanel.setBackground(Color.lightGray);
      previewPanel.setBackground(Color.lightGray);
      statePanel.setBackground(Color.lightGray);
      statePanel.repaint();
      statePanel.validate();
      viewPanel.repaint();
      viewPanel.validate();
      treePanel.repaint();
      treePanel.validate();
      previewPanel.repaint();
      previewPanel.validate();
    }
  }

  public void copy(String filePath) {
    copyFile = new File(filePath);
    cutFile = null;
  }

  public void cut(String filePath) {
    cutFile = new File(filePath);
    copyFile = null;
  }

  public void paste(File sourceFile, File directFile) throws Exception {
    if (directFile != null) {
      String name = new String();
      name = new String();
      StringTokenizer tokenizer = new StringTokenizer(sourceFile.getPath(), "\\");
      while (tokenizer.hasMoreTokens()) {
        name = tokenizer.nextToken();
      }
      if ((sourceFile.getParentFile().equals(directFile))) {
        JOptionPane.showMessageDialog(null, "当前文件夹已存在该文件", "提示", JOptionPane.INFORMATION_MESSAGE);
        return;
      }
      File newFile = new File(directFile.getPath() + File.separator + name);
      FileInputStream fis = new FileInputStream(sourceFile);
      FileOutputStream fos = new FileOutputStream(newFile);
      byte[] buf = new byte[1024 * 1024];
      int i = 0;
      while ((i = fis.read(buf)) != -1) {
        fos.write(buf, 0, i);
      }
      fis.close();
      fos.close();
      Image img = javax.imageio.ImageIO.read(newFile);
      ImageIcon imageIcon = new ImageIcon(new DrawImage(img, 200).getImage());
      JButton newImageButton = new JButton(imageIcon);
      newImageButton.setVerticalTextPosition(JButton.BOTTOM);
      newImageButton.setHorizontalTextPosition(JButton.CENTER);
      newImageButton.setHorizontalAlignment(JButton.CENTER);
      int j = newFile.getPath().lastIndexOf('\\');
      String newname = newFile.getPath().substring(j + 1, newFile.getPath().length());
      newImageButton.setText(newname);
      newImageButton.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
          String picPath = "";
          if (e.getClickCount() == 1) {
            LoadImage.changeStateLabel((JButton) e.getSource());
          } else if (e.getClickCount() == 2) {
            LoadImage.changeStateLabel((JButton) e.getSource());
            picPath = LoadImage.stateLabel.getText();
            ImageFrame imageFrame = new ImageFrame(picPath);
            ImageFrame.myImageFrame = imageFrame;
          }
        }
      });
      viewPanel.add(newImageButton);
      viewPanel.repaint();
      viewPanel.validate();
    }
  }

  public void rename() {
    File changeNameFile = new File(stateLabel.getText());
    String newName = JOptionPane.showInputDialog(null, "请输入新文件名:", "newName");
    if(newName == null) return;
    int j = stateLabel.getText().lastIndexOf(".");
    String sub = stateLabel.getText().substring(j, stateLabel.getText().length());
    for (int i = 0; i < imagePath.length; i++) {
      int p = imagePath[i].getPath().lastIndexOf("\\");
      String beName = imagePath[i].getPath().substring(p + 1, imagePath[i].getPath().length());
      if (beName.equals(newName + sub)) {
        JOptionPane.showMessageDialog(null, "当前文件夹已存在该文件名!", "错误", JOptionPane.QUESTION_MESSAGE);
        return;
      }
    }
    File afterChange = new File(changeNameFile.getParent() + File.separator + newName + sub);
    changeNameFile.renameTo(afterChange);
    stateLabel.setText(afterChange.getPath());
    int k = stateLabel.getText().lastIndexOf("\\");
    String sub2 = stateLabel.getText().substring(k + 1, stateLabel.getText().length());
    LoadImage.choosedImage.setText(sub2);
    viewPanel.repaint();
    viewPanel.validate();
  }

  public void renameAll() {
    if (imagePath == null) {
      JOptionPane.showMessageDialog(null, "没有任何文件可重命名!");
    } else {
      String newName = JOptionPane.showInputDialog(null, "请输入新文件名:", "重命名");
      if (newName != null) {
        File[] afterChange = new File[imagePath.length];
        for (int i = 0; i < imagePath.length; i++) {
          int j = imagePath[i].toString().lastIndexOf(".");
          String sub = imagePath[i].toString().substring(j, imagePath[i].toString().length());
          afterChange[i] = new File(imagePath[i].getParent() + File.separator + newName + (i + 1) + sub);
          imagePath[i].renameTo(afterChange[i]);
          int k = afterChange[i].toString().lastIndexOf("\\");
          String sub2 = afterChange[i].toString().substring(k + 1, afterChange[i].toString().length());
          LoadImage.allButton[i].setText(sub2);
        }
      }
    }
  }

  public void delete() {
    int i = JOptionPane.showConfirmDialog(null, "确定删除图片?", "删除图片", JOptionPane.YES_NO_OPTION);
    if (i == JOptionPane.YES_OPTION) {
      File delFile = new File(stateLabel.getText());
      delFile.delete();
      previewLabel.setIcon(new ImageIcon());
      previewPanel.repaint();
      previewPanel.validate();
      int t = stateLabel.getText().lastIndexOf('\\');
      String delName = stateLabel.getText().substring(t + 1, stateLabel.getText().length());
      for (int j = 0; j < LoadImage.allButton.length; j++) {
        if (LoadImage.allButton[j].getText().equals(delName)) {
          stateLabel.setText("未选定");
          copyFile = null;
          cutFile = null;
          viewPanel.remove(LoadImage.allButton[i]);
          viewPanel.repaint();
          viewPanel.validate();
        }
      }
    } else {
      return;
    }
  }
}

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Maoris
*/
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.MouseAdapter.*;

class LoadImage implements Runnable {

  public Image img = null;
  public File aPath;
  public JPanel viewPanel;
  public static File[] imagePath;
  public ImageIcon[] smallPicture;
  public JButton[] picButton;
  public ImageFrame imageFrame;
  public static JLabel stateLabel;
  public JScrollPane scrollBar;
  public static JButton choosedImage;
  public static JButton[] allButton;

  public LoadImage(JPanel viewPanel,JScrollPane scrollPane, File[] imagePath, final JLabel stateLabel) {
    this.viewPanel = viewPanel;
    this.scrollBar = scrollPane;
    LoadImage.imagePath = imagePath;
    LoadImage.stateLabel = stateLabel;
    smallPicture = new ImageIcon[imagePath.length];
    picButton = new JButton[imagePath.length];
    allButton = picButton;
    for (int i = 0; i < imagePath.length; i++) {
      picButton[i] = new JButton();
      picButton[i].addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
          String picPath = "";
          choosedImage = (JButton)e.getSource();
          if (e.getClickCount() == 1) {
            changeStateLabel((JButton) e.getSource());
            MainFrame.previewLabel.setIcon(choosedImage.getIcon());
            MainFrame.previewPanel.repaint();
            MainFrame.previewPanel.validate();
          } else if (e.getClickCount() == 2) {
            MainFrame.previewLabel.setIcon(choosedImage.getIcon());
            MainFrame.previewPanel.repaint();
            MainFrame.previewPanel.validate();
            changeStateLabel((JButton) e.getSource());
            picPath = stateLabel.getText();
            imageFrame = new ImageFrame(picPath);
            ImageFrame.myImageFrame = imageFrame;  
          }
        }
      });
    }
  }

  public static void changeStateLabel(JButton picButton) {
    stateLabel.setText(imagePath[0].getParent() + File.separator + picButton.getText());
  }

  public void run() {
    viewPanel.removeAll();
    for (int i = 0; i < imagePath.length; i++) {
      try {
        img = javax.imageio.ImageIO.read(imagePath[i]);
      } catch (IOException ex) {
        ex.printStackTrace();
      }
      smallPicture[i] = new ImageIcon(new DrawImage(img, 200).getImage());
      picButton[i].setIcon(smallPicture[i]);
      picButton[i].setVerticalTextPosition(JLabel.BOTTOM);
      picButton[i].setHorizontalTextPosition(JLabel.CENTER);
      picButton[i].setHorizontalAlignment(JLabel.CENTER);
      int j = imagePath[i].getPath().lastIndexOf(File.separator);
      String sub = imagePath[i].getPath().substring(j + 1, imagePath[i].getPath().length());
      picButton[i].setText(sub);
      viewPanel.add(picButton[i]);
      viewPanel.repaint();
      viewPanel.validate();
      scrollBar.repaint();
      scrollBar.validate();
    }

  }
}

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Maoris
*/
import java.awt.*;
import java.awt.image.BufferedImage;

public class DrawImage {

  private BufferedImage bufferedimage;
  private int Scalse;

  DrawImage(Image image,int Value) {    //按原图画出图像大小
    int w = image.getWidth(null);
    int h = image.getHeight(null);
    float bi = w > h ? (float) h / (float) w : (float) w / (float) h;
    if (w > h) {
      w = Value;
      h = (int) (Value * bi);
    } else if (h > w) {
      h = Value;
      w = (int) (Value * bi);
    } else {
      w = Value;
      h = Value;
    }
    bufferedimage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2D = bufferedimage.createGraphics();
    g2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2D.drawImage(image, 0, 0, w, h, null);
    g2D.dispose();
  }

  DrawImage(Image image, int Width, int Height, int S) {//画出指定大小的图
    Scalse = S;
    bufferedimage = new BufferedImage(Width * Scalse, Height * Scalse, BufferedImage.TYPE_INT_ARGB);
    Graphics2D g2D = bufferedimage.createGraphics();
    g2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2D.drawImage(image, 0, 0, Width * Scalse, Height * Scalse, null);
    g2D.dispose();
  }

  public Image getImage() {
    return this.bufferedimage;
  }
}

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Maoris
*/
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.io.IOException;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.ImageIcon.*;

public class ImageFrame extends JFrame implements ActionListener{

  public JPanel imagePanel;
  public JPanel buttonPanel;
  public JPanel statePanel;
  public JLabel imageLabel;
  public JLabel stateLabel;
  public JButton before;
  public JButton play;
  public JButton stop;
  public JButton next;
  public JButton bigger;
  public JButton smaller;
  public File picFile;
  public Image img;
  public ImageIcon imageIcon;
  public String fileParent;
  FileNameExtensionFilter imageFilter = new FileNameExtensionFilter(null, "jpeg", "jpg", "png", "gif");
  JFileChooser imageChooser = new JFileChooser();
  public File filePath[];
  public File imagePath[];
  public int imageFileNumber = 0;
  public int locationImage = 0;
  public static ImageFrame myImageFrame;
  private PlayTimer playTimer;
  public Image[] imageOffer;
  public int scale = 8;
  public JScrollPane imageScrollPane;

  public ImageFrame(String picPath) {
    picFile = new File(picPath);
    fileParent = picFile.getParent();
    filePath = (new File(fileParent)).listFiles();
    try {
      img = javax.imageio.ImageIO.read(picFile);
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    imageIcon = new ImageIcon(img);
    imageLabel = new JLabel(imageIcon);
    imagePanel = new JPanel(new BorderLayout());
    imagePanel.setBackground(Color.black);
    stateLabel = new JLabel();
    setLayout(new BorderLayout());
    setTitle("PowerSee 图片查看器");
    setIconImage(new ImageIcon("icon/powerSee.png").getImage());
    setSize(300, 250);
    setVisible(true);
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    buttonPanel = makeButtonPanel();
    statePanel = new JPanel();
    stateLabel.setText("像素大小: " + imageIcon.getIconWidth() + "*" + imageIcon.getIconHeight() + "   文件位置: " +
        picFile.toString() + "  文件大小: " + picFile.length() / 1024 + "KB");
    imagePanel.add(imageLabel, BorderLayout.CENTER);
    imageScrollPane = new JScrollPane(imagePanel);
    add(imageScrollPane, BorderLayout.CENTER);
    add(buttonPanel, BorderLayout.NORTH);
    statePanel.add(stateLabel);
    add(statePanel, BorderLayout.SOUTH);
    imagePanel.repaint();
    imagePanel.validate();
    load();
  }

  public JPanel makeButtonPanel() {
    JPanel aButtonPanel = new JPanel();
    before = new JButton(new ImageIcon("icon" + File.separator + "beforeIcon.png"));
    next = new JButton(new ImageIcon("icon/nextIcon.png"));
    play = new JButton(new ImageIcon("icon/playIcon.png"));
    stop = new JButton(new ImageIcon("icon/stopIcon.png"));
    bigger = new JButton(new ImageIcon("icon/biggerIcon.png"));
    smaller = new JButton(new ImageIcon("icon/smallerIcon.png"));
    stop.setEnabled(false);
    before.addActionListener(this);
    next.addActionListener(this);
    play.addActionListener(this);
    stop.addActionListener(this);
    bigger.addActionListener(this);
    smaller.addActionListener(this);
    aButtonPanel.add(before);
    aButtonPanel.add(play);
    aButtonPanel.add(stop);
    aButtonPanel.add(next);
    aButtonPanel.add(smaller);
    aButtonPanel.add(bigger);
    return aButtonPanel;
  }

  public void load() {
    imageChooser.setFileFilter(imageFilter);
    for (int i = 0; i < filePath.length; i++) {
      if (!filePath[i].isDirectory() && imageFilter.accept(filePath[i])) {
        imageFileNumber++;
      } else {
        filePath[i] = null;
      }
    }
    imagePath = new File[imageFileNumber];
    imageFileNumber = 0;
    for (int i = 0; i < filePath.length; i++) {
      if (filePath[i] != null) {
        imagePath[imageFileNumber++] = filePath[i];
      }
    }
    imageFileNumber--;
    for (int i = 0; i < imagePath.length; i++) {
      if (imagePath[i] == picFile) {
        locationImage = i;
      }
    }
  }

  public void before() {
    scale = 8;
    if (--locationImage < 0) {
      locationImage = imageFileNumber;
    }
    try {
      img = javax.imageio.ImageIO.read(imagePath[locationImage]);
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    imageIcon.setImage(img);
    imageLabel.setIcon(imageIcon);
    picFile = imagePath[locationImage];
    stateLabel.setText("像素大小: " + imageIcon.getIconWidth() + "*" + imageIcon.getIconHeight() + "   文件位置: " +
        picFile.toString() + "  文件大小: " + picFile.length() / 1024 + "KB");
    imagePanel.repaint();
    imagePanel.validate();
    imageScrollPane.repaint();
    imageScrollPane.validate();
  }

  public void next() {
    scale = 8;
    if (++locationImage > imageFileNumber) {
      locationImage = 0;
    }
    try {
      img = javax.imageio.ImageIO.read(imagePath[locationImage]);
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    imageIcon.setImage(img);
    imageLabel.setIcon(imageIcon);
    picFile = imagePath[locationImage];
    stateLabel.setText("像素大小: " + imageIcon.getIconWidth() + "*" + imageIcon.getIconHeight() + "   文件位置: " +
        picFile.toString() + "  文件大小: " + picFile.length() / 1024 + "KB");
    imagePanel.repaint();
    imagePanel.validate();
    imageScrollPane.repaint();
    imageScrollPane.validate();
  }

  public void bigger(){
    ImageIcon icon = imageIcon;
    if (scale <= 17) {
      ImageIcon tmpicon = new ImageIcon(new DrawImage(icon.getImage(), icon.getIconWidth() / 8, icon.getIconHeight() / 8, ++scale).getImage());
      imageLabel.setIcon(tmpicon);
    } else {
      return;
    }
  }

  public void smaller(){
    ImageIcon icon = imageIcon;
    if (scale > 1) {
      ImageIcon tmpicon = new ImageIcon(new DrawImage(icon.getImage(), icon.getIconWidth() / 8, icon.getIconHeight() / 8, --scale).getImage());
      imageLabel.setIcon(tmpicon);
    } else {
      return;
    }
  }

  public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(before)) {
      before();
    }
    if (e.getSource().equals(next)) {
      next();
    }
    if (e.getSource().equals(play)) {
      stop.setEnabled(true);
      before.setEnabled(false);
      next.setEnabled(false);
      bigger.setEnabled(false);
      smaller.setEnabled(false);
      play.setEnabled(false);
      playTimer = new PlayTimer(this);
      playTimer.start();
    }
    if (e.getSource().equals(stop)) {
      stop.setEnabled(false);
      before.setEnabled(true);
      next.setEnabled(true);
      bigger.setEnabled(true);
      smaller.setEnabled(true);
      play.setEnabled(true);
      playTimer.cancel();
    }
    if(e.getSource().equals(bigger)){
      bigger();
    }
    if(e.getSource().equals(smaller)){
      smaller();
    }
  }
}

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Maoris
*/
import java.awt.*;
import java.awt.datatransfer.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator;
import java.util.List;

import javax.swing.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.filechooser.FileSystemView;
import javax.swing.tree.*;

class SoureTree extends JTree {

  BufferedImage GhostImage;
  private TreePath lastPath;
  private Timer hoverTimer;
  FileNode sourceNode;

  public SoureTree() {
    setModel(createTreeModel());
    addTreeExpansionListener(new TreeExpansionListener() {

      public void treeCollapsed(TreeExpansionEvent e) {
      }

      public void treeExpanded(TreeExpansionEvent e) {
        TreePath path = e.getPath();

        if (path != null) {
          FileNode node = (FileNode) path.getLastPathComponent();

          if (!node.isExplored()) {
            DefaultTreeModel model = (DefaultTreeModel) getModel();
            node.explore();
            model.nodeStructureChanged(node);
          }
        }
      }
    });
    this.setCellRenderer(new DefaultTreeCellRenderer() {

      @Override
      public Component getTreeCellRendererComponent(JTree tree,
          Object value, boolean selected, boolean expanded,
          boolean leaf, int row, boolean hasFocus) {
        TreePath tp = tree.getPathForRow(row);
        if (tp != null) {
          FileNode node = (FileNode) tp.getLastPathComponent();
          File f = node.getFile();
          try {
            Icon icon = FileSystemView.getFileSystemView().getSystemIcon(f);
            this.setIcon(icon);
            this.setLeafIcon(icon);
            this.setOpenIcon(icon);
            this.setClosedIcon(icon);
            this.setDisabledIcon(icon);
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
        return super.getTreeCellRendererComponent(tree, value,
            selected, expanded, leaf, row, hasFocus);
      }
    });

    super.setScrollsOnExpand(true);

    hoverTimer = new Timer(1000, new ActionListener() {

      public void actionPerformed(ActionEvent e) {
        if (lastPath == null) {
          return;
        }
        if (getRowForPath(lastPath) == 0) {
          return;
        }
        if (isExpanded(lastPath)) {
          collapsePath(lastPath);
        } else {
          expandPath(lastPath);
        }
      }
    });
    hoverTimer.setRepeats(false);

    this.addKeyListener(new KeyAdapter() {

      @Override
      public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
        int modifiers = e.getModifiers();
        if (code == 'v' || code == 'V') {
          System.out.println("find  v");
          System.out.println("modifiers:" + modifiers + "\t" + ((modifiers & KeyEvent.CTRL_MASK) != 0));
        }

        if ((modifiers & KeyEvent.CTRL_MASK) != 0 && (code == 'v' || code == 'V')) {
          Transferable tr = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);

          TreePath path = getSelectionPath();
          if (path == null) {
            return;
          }
          FileNode node = (FileNode) path.getLastPathComponent();
          if (node.isDirectory()) {
            System.out.println("file  cp");
            try {
              List list = (List) (tr.getTransferData(DataFlavor.javaFileListFlavor));
              Iterator iterator = list.iterator();
              File parent = node.getFile();
              while (iterator.hasNext()) {
                File f = (File) iterator.next();

              }
              node.reexplore();
            } catch (Exception ioe) {
              ioe.printStackTrace();
            }
            updateUI();
          }
        }
      }
    });
  }

  public String getFilename() {
    TreePath path = getLeadSelectionPath();
    FileNode node = (FileNode) path.getLastPathComponent();
    return ((File) node.getUserObject()).getAbsolutePath();
  }

  private DefaultTreeModel createTreeModel() {
    File root = FileSystemView.getFileSystemView().getRoots()[0];
    FileNode rootNode = new FileNode(root);
    rootNode.explore();
    return new DefaultTreeModel(rootNode);
  }

  class FileNode extends DefaultMutableTreeNode {

    private boolean explored = false;

    public FileNode(File file) {
      setUserObject(file);
    }

    @Override
    public boolean getAllowsChildren() {
      return isDirectory();
    }

    @Override
    public boolean isLeaf() {
      return !isDirectory();
    }

    public File getFile() {
      return (File) getUserObject();
    }

    public boolean isExplored() {
      return explored;
    }

    public boolean isDirectory() {
      File file = getFile();
      return file.isDirectory();
    }

    @Override
    public String toString() {
      File file = (File) getUserObject();
      String filename = file.toString();
      int index = filename.lastIndexOf(File.separator);
      return (index != -1 && index != filename.length() - 1) ? filename.substring(index + 1) : filename;
    }

    public void explore() {
      if (!isDirectory()) {
        return;
      }

      if (!isExplored()) {
        File file = getFile();
        File[] childrenNode = file.listFiles();
        for (int i = 0; i < childrenNode.length; ++i) {
          if (childrenNode[i].isDirectory()) {
            add(new FileNode(childrenNode[i]));
          }
        }
        explored = true;
      }
    }

    public void reexplore() {
      this.removeAllChildren();
      explored = false;
      explore();
    }
  }
}

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

/**
*
* @author Maoris
*/
import java.util.Timer;
import java.util.TimerTask;

class PlayTimer {
  private int second;
  ImageFrame imageFrame;
  private final Timer timer = new Timer();
  public PlayTimer(ImageFrame imageFrame){
    this.imageFrame = imageFrame;
    second = 2;
  }
  public void start(){
    timer.schedule(new TimerTask() {
      public void run() {
          imageFrame.next();
      }
    },second * 1000 ,second * 1000);
  }

  public void cancel(){
    timer.cancel();
  }
}

Tags:java 编写 一个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接