📄 frameofpicviewer.java
字号:
package picviewer;import java.io.*;import java.awt.*;import javax.swing.*;import javax.swing.tree.*;import java.awt.event.*;import javax.swing.event.*;import java.util.*;/** * Title: 图片浏览器 * Description: 这是一个用于浏览磁盘上图片文件的程序 * Copyright: Copyright (c) 2001 * Company: * @author java_user * @version 1.0 */public class FrameOfPicViewer extends JFrame { BorderLayout borderLayout1 = new BorderLayout(); JLabel StatusBar = new JLabel(); JPanel mainPanel = new JPanel(); GridLayout gridLayout1 = new GridLayout(); JPanel leftPanel = new JPanel(); JPanel rightPanel = new JPanel(); BorderLayout borderLayout2 = new BorderLayout(); JComboBox cmbDrivers = new JComboBox(); JLabel jLabel1 = new JLabel(); JScrollPane jScrollPane1 = new JScrollPane(); JTree treFileList; TreeNode root; DefaultTreeModel model; String selDriver=""; String selFilePath=""; boolean runState=false; boolean selState=false; public FrameOfPicViewer() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } runState=true; } public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(Exception e) { } FrameOfPicViewer frameOfPicViewer = new FrameOfPicViewer(); } private void jbInit() throws Exception { this.getContentPane().setLayout(borderLayout1); StatusBar.setText(" "); mainPanel.setLayout(gridLayout1); gridLayout1.setColumns(2); leftPanel.setLayout(borderLayout2); jLabel1.setText("请选择图片文件"); this.setTitle("图片浏览器"); this.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(WindowEvent e) { this_windowClosing(e); } }); cmbDrivers.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(ItemEvent e) { cmbDrivers_itemStateChanged(e); } }); this.getContentPane().add(StatusBar, BorderLayout.SOUTH); this.getContentPane().add(mainPanel, BorderLayout.CENTER); mainPanel.add(leftPanel, null); mainPanel.add(rightPanel, null); leftPanel.add(cmbDrivers, BorderLayout.NORTH); leftPanel.add(jScrollPane1, BorderLayout.CENTER); this.getContentPane().add(jLabel1, BorderLayout.NORTH); loadDrivers(cmbDrivers); selDriver=cmbDrivers.getSelectedItem().toString().trim(); root=loadFilePaths(selDriver); model=new DefaultTreeModel(root); treFileList=new JTree(model); jScrollPane1.getViewport().add(treFileList, null); DefaultTreeCellRenderer render=new DefaultTreeCellRenderer(); render.setClosedIcon(new ImageIcon("images/closed.gif")); render.setOpenIcon(new ImageIcon("images/open.gif")); render.setLeafIcon(new ImageIcon("images/leaf.gif")); treFileList.setCellRenderer(render); // treFileList.setEditable(true); int selModel=TreeSelectionModel.SINGLE_TREE_SELECTION ; treFileList.getSelectionModel().setSelectionMode(selModel); treFileList.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { treFileList_valueChanged(e); } }); setSize(600,300); selState=true; show(); } void this_windowClosing(WindowEvent e) { System.exit(0); } private void loadDrivers(JComboBox cmbBox){ //建立当前路径的File对象 File currentPath=new File("."); File[] drivers=currentPath.listRoots(); //得到计算机中所有驱动器的名称 for(int i=0;i<= drivers.length -1;i++){ cmbBox.addItem(drivers[i].toString()); } //缺省值设置为当前路径的驱动器 String path=currentPath.getAbsolutePath(); for(int i=0;i<= drivers.length -1;i++){ if(path.indexOf(cmbBox.getItemAt(i).toString().trim() )>=0) { cmbBox.setSelectedItem(cmbBox.getItemAt(i)); break; } } } //利用递归函数得到选择驱动器中所有的图片文件 private TreeNode loadFilePaths(String rootPath){ StatusBar.setText(" "); File path=new File(rootPath); DefaultMutableTreeNode root=new DefaultMutableTreeNode(path.getName().trim()); DefaultTreeModel model=new DefaultTreeModel(root); File[] childsOfPath=path.listFiles(); for(int i=0;i<=childsOfPath.length-1;i++){ String name=childsOfPath[i].getName().trim(); if(childsOfPath[i].isDirectory() ){ DefaultMutableTreeNode childRoot; childRoot=(DefaultMutableTreeNode)loadFilePaths(childsOfPath[i].getAbsolutePath()); if(childRoot.getChildCount() >0) root.add(childRoot); } else { int c=name.lastIndexOf(".") ; String fileType=name.substring(c+1).toUpperCase(); if(fileType.equals("JPG") ||fileType.equals("GIF") ){ DefaultMutableTreeNode childRoot=new DefaultMutableTreeNode(name); root.add(childRoot); } } } return root; } void cmbDrivers_itemStateChanged(ItemEvent e) { selState=false; String strDriver=cmbDrivers.getSelectedItem().toString().trim(); if(runState&& !strDriver.equals(selDriver)) { DefaultMutableTreeNode newRoot=(DefaultMutableTreeNode)loadFilePaths(strDriver); Enumeration childs=((DefaultMutableTreeNode)root).children(); while(childs.hasMoreElements() ){ DefaultMutableTreeNode node= (DefaultMutableTreeNode)childs.nextElement(); model.removeNodeFromParent(node ); } for(int i=1;i<=newRoot.getChildCount() ;i++){ model.insertNodeInto((DefaultMutableTreeNode)newRoot.getChildAt(i-1),(DefaultMutableTreeNode)root,0 ); } model.reload(root); selDriver=strDriver; } selState=true; } void treFileList_valueChanged(TreeSelectionEvent e) { if(selState){ TreePath path=treFileList.getSelectionPath(); DefaultMutableTreeNode node=(DefaultMutableTreeNode)path.getLastPathComponent(); if(node.isLeaf() ){ String selFile=""; String strPath=path.toString(); strPath=strPath.replace('[',' '); strPath=strPath.replace(']',' ').trim(); for(int i=1;i<=path.getPathCount()-1;i++ ){ int c=strPath.lastIndexOf(",") ; selFile=strPath.substring(c+1).trim()+"\\"+selFile; strPath=strPath.substring(0,c); } selFile=selDriver+selFile.substring(0,selFile.length()-1).trim(); loadPic(selFile); } } } void loadPic(String picName){ ImageIcon img=new ImageIcon(picName); int pWidth=rightPanel.getWidth(); int pHeight=rightPanel.getHeight(); int mWidth=img.getIconWidth() ; int mHeight=img.getIconHeight() ; int x,y; int width,height; if((mWidth<=pWidth)&&(mHeight<=pHeight)){ x=(pWidth-mWidth)/2; y=(pHeight-mHeight)/2; width=mWidth; height=mHeight; }else { width=pWidth; height=pHeight; float widthScale=(float)pWidth/(float)mWidth; float heightScale=(float)pHeight/(float)mHeight; if(widthScale<heightScale) height=(int)(mHeight*widthScale); else width=(int)(mWidth*heightScale); x=(pWidth-width)/2; y=(pHeight-height)/2; } StatusBar.setText("文件:"+picName+" 大小:"+mWidth+"X"+mHeight); rightPanel.getGraphics().clearRect(0,0,pWidth,pHeight); rightPanel.getGraphics().drawImage(img.getImage(),x,y,width,height,this); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -