📄 virtualfilesystemview.java
字号:
/* * VirtualFileSystemView.java * * Created on November 21, 2002, 11:40 AM */package jcdwriter.ui;import javax.swing.*;import javax.swing.tree.*;import java.awt.datatransfer.*;import java.awt.dnd.*;import java.awt.Cursor;import java.awt.Point;import java.util.StringTokenizer;import java.util.*;import java.io.File;import java.util.Collections;import jcdwriter.model.*;import jcdwriter.model.Log;/** * * @author rmallappa */public class VirtualFileSystemView extends javax.swing.JPanel implements javax.swing.event.TreeWillExpandListener, javax.swing.event.TreeExpansionListener, java.awt.dnd.DropTargetListener{ /** Creates new form VirtualFileSystemView */ public VirtualFileSystemView() { DefaultTreeCellRenderer treeCellRenderer; initComponents(); initializeFileSystemRoots(); treeCellRenderer = (DefaultTreeCellRenderer)directoryTree.getCellRenderer(); treeCellRenderer.setLeafIcon(treeCellRenderer.getClosedIcon()); /*Remove the transfer handler so that it does not do its own copy/paste. This was causing exception when nothing in the JTree is selected.*/ directoryTree.setTransferHandler(null); directoryTree.setExpandsSelectedPaths(true); //set default model and icons for the fileList. fileList.setModel(new DefaultListModel()); dropTarget = new DropTarget(directoryTree, this); } private void initializeFileSystemRoots(){ VirtualFileSystemNode rootNode = null; rootNode = new VirtualFileSystemNode("Virtual_ROOT"); rootNode.isVirtualFileSystemRoot(true); ((DefaultTreeModel)directoryTree.getModel()).setRoot(rootNode); // directoryTree.setShowsRootHandles(true); } private void initComponents() { dirAndFilesSplitPane = new javax.swing.JSplitPane(); directoryTreeScrollPane = new javax.swing.JScrollPane(); directoryTree = new javax.swing.JTree(); fileListScrollPane = new javax.swing.JScrollPane(); fileList = new javax.swing.JList(); setLayout(new java.awt.BorderLayout()); dirAndFilesSplitPane.setDividerSize(5); dirAndFilesSplitPane.setMaximumSize(null); dirAndFilesSplitPane.setMinimumSize(new java.awt.Dimension(150, 100)); dirAndFilesSplitPane.setPreferredSize(new java.awt.Dimension(300, 150)); directoryTreeScrollPane.setMaximumSize(null); directoryTreeScrollPane.setMinimumSize(new java.awt.Dimension(150, 150)); directoryTree.setMaximumSize(null); directoryTree.setMinimumSize(null); directoryTree.setPreferredSize(null); directoryTree.addKeyListener(new java.awt.event.KeyAdapter() { public void keyReleased(java.awt.event.KeyEvent evt) { directoryTreeKeyReleased(evt); } }); directoryTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() { public void valueChanged(javax.swing.event.TreeSelectionEvent evt) { directoryTreeValueChanged(evt); } }); directoryTree.addTreeWillExpandListener(new javax.swing.event.TreeWillExpandListener() { public void treeWillExpand(javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException { directoryTreeTreeWillExpand(evt); } public void treeWillCollapse(javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException { directoryTreeTreeWillCollapse(evt); } }); directoryTreeScrollPane.setViewportView(directoryTree); dirAndFilesSplitPane.setLeftComponent(directoryTreeScrollPane); fileListScrollPane.setMaximumSize(null); fileListScrollPane.setMinimumSize(new java.awt.Dimension(10, 10)); fileList.setMaximumSize(null); fileList.setMinimumSize(null); fileList.setPreferredSize(null); fileListScrollPane.setViewportView(fileList); dirAndFilesSplitPane.setRightComponent(fileListScrollPane); add(dirAndFilesSplitPane, java.awt.BorderLayout.CENTER); fileList.addListSelectionListener(new javax.swing.event.ListSelectionListener() { public void valueChanged(javax.swing.event.ListSelectionEvent evt) { fileListSelectionChanged(evt); } }); } private void fileListSelectionChanged(javax.swing.event.ListSelectionEvent evt){ jcdwriter.model.Log.writeln("VirtualFileSystemView:", "You selected something in file list", 4); int selFiles[] = fileList.getSelectedIndices(); Log.writeln("VirtualFileSystemView: num files selected: ", String.valueOf(selFiles.length), 4); }; private void directoryTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) { try { refreshFileListForPath(evt.getPath()); } catch (Exception e) { System.out.println("Exception in directoryTreeValueChanged."); } } private void directoryTreeTreeWillCollapse(javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException { } private void directoryTreeTreeWillExpand(javax.swing.event.TreeExpansionEvent evt) throws javax.swing.tree.ExpandVetoException { } private void directoryTreeKeyReleased(java.awt.event.KeyEvent evt) { if ((evt.getModifiers() == java.awt.event.KeyEvent.CTRL_MASK) && (evt.getKeyCode() == java.awt.event.KeyEvent.VK_V)) { pasteFromClipboard(); } else {/* INSERT DELETE are shortcuts from main menu now. if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_INSERT) { insertNewNode(); } else { if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_DELETE) { eraseSelectedNode(); } } */ } } protected void processKeyEvent(java.awt.event.KeyEvent evt) { // System.out.println("Process Key Event"); } public void insertNewNode(){ TreePath[] selectedPaths; VirtualFileSystemNode selectedNode; selectedPaths = directoryTree.getSelectionPaths(); if (selectedPaths == null) return; if (selectedPaths.length != 1) return; selectedNode = (VirtualFileSystemNode)selectedPaths[0].getLastPathComponent(); String newDirName = JOptionPane.showInputDialog("Name of new directory?"); if (newDirName != null && newDirName.length() > 0) { if(!selectedNode.isNameAlreadyTaken(newDirName)){ VirtualFileSystemNode newNode = new VirtualFileSystemNode(newDirName); newNode.isCreatedDirectory(true); selectedNode.add(newNode); ((DefaultTreeModel)directoryTree.getModel()).reload(selectedNode); } else System.out.println("Name: " + newDirName + " already taken"); } } public void eraseSelectedNode() { /* incomplete. should work again on delete functionality when other things are stable */ int i = 1; if (i > 1) return; TreePath[] selectedPaths; VirtualFileSystemNode selectedNode, parentNode; selectedPaths = directoryTree.getSelectionPaths(); if (selectedPaths == null) return; /* For now, allow deleting nodes one-by-one only */ if (selectedPaths.length != 1) return; selectedNode = (VirtualFileSystemNode)selectedPaths[0].getLastPathComponent(); parentNode = (VirtualFileSystemNode)selectedNode.getParent(); if (JOptionPane.showConfirmDialog(this, " Delete '" + selectedNode.name() + "'", "Delete Confirmation", JOptionPane.YES_NO_OPTION) == 0) { ((VirtualFileSystemNode)parentNode).deleteNode(selectedNode); ((DefaultTreeModel)directoryTree.getModel()).reload(parentNode); ((DefaultListModel)fileList.getModel()).removeAllElements(); printVirtualFileSystemSize(); } } private void pasteFromClipboard() { Transferable dataHolder; String transferData, nextToken; StringTokenizer pathsEnum; TreePath[] selectedPaths;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -