SourceBrowserWindow.java
上传用户:zhengdagz
上传日期:2014-03-06
资源大小:1956k
文件大小:8k
源码类别:

xml/soap/webservice

开发平台:

Java

  1. /*
  2.  * SourceBrowserWindow.java
  3.  *
  4.  * Created on April 5, 2005, 9:00 AM
  5.  */
  6. package org.jdesktop.demo;
  7. import java.io.File;
  8. import java.io.FileInputStream;
  9. import java.io.InputStream;
  10. import java.util.Vector;
  11. import javax.swing.JFrame;
  12. import javax.swing.text.rtf.RTFEditorKit;
  13. import javax.swing.tree.DefaultMutableTreeNode;
  14. import javax.swing.tree.DefaultTreeModel;
  15. import javax.swing.tree.TreeModel;
  16. import javax.swing.tree.TreeNode;
  17. import javax.swing.tree.TreePath;
  18. import org.jdesktop.swingx.JXTitledPanel;
  19. import org.jdesktop.swingx.util.WindowUtils;
  20. /**
  21.  *
  22.  * @author  rbair
  23.  */
  24. public class SourceBrowserWindow extends javax.swing.JFrame {
  25.     private File rootDir;
  26.     
  27.     /** Creates new form SourceBrowserWindow */
  28.     public SourceBrowserWindow(File sourceRootDir) {
  29. //        rootDir = new File("/usr/local/src/swinglabs-demos/swinglabs-demos/src/java");
  30.         rootDir = sourceRootDir;
  31.         initComponents();
  32.         setSize(800, 600);
  33.         setLocation(WindowUtils.getPointForCentering(this));
  34.     }
  35.     
  36.     public void setSelectedSourceFile(File sourceFile) {
  37.        // Build vector of path elements      
  38.        File pathElement = sourceFile;
  39.        Vector pathElements = new Vector();
  40.        pathElements.add(pathElement);
  41.        while (!pathElement.equals(rootDir))  {
  42.            pathElement = pathElement.getParentFile();
  43.            pathElements.insertElementAt(pathElement, 0);
  44.        }
  45.        // Now use path elements to do top-down search for corresponding tree node
  46.        DefaultTreeModel treeModel = (DefaultTreeModel)sourceTree.getModel(); 
  47.        DefaultMutableTreeNode pathNode = (DefaultMutableTreeNode)treeModel.getRoot(); 
  48.        for(int i = 0; i < pathElements.size(); i++) {
  49.            pathElement = (File)pathElements.get(i);
  50.            for(int j = 0; j < pathNode.getChildCount(); j++) {
  51.                DefaultMutableTreeNode node = (DefaultMutableTreeNode)pathNode.getChildAt(j);
  52.                if (node.getUserObject().equals(pathElement)) {
  53.                    pathNode = node;
  54.                    break;
  55.                }
  56.            }
  57.        }       
  58.        sourceTree.setSelectionPath(new TreePath(pathNode.getPath()));
  59.     }
  60.     
  61.     /** This method is called from within the constructor to
  62.      * initialize the form.
  63.      * WARNING: Do NOT modify this code. The content of this method is
  64.      * always regenerated by the Form Editor.
  65.      */
  66.     // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
  67.     private void initComponents() {
  68.         java.awt.GridBagConstraints gridBagConstraints;
  69.         jScrollPane1 = new javax.swing.JScrollPane();
  70.         sourceTree = new javax.swing.JTree();
  71.         jScrollPane2 = new javax.swing.JScrollPane();
  72.         oldEditorPane = new org.jdesktop.swingx.JXEditorPane();
  73.         jSplitPane1 = new javax.swing.JSplitPane();
  74.         jMenuBar1 = new javax.swing.JMenuBar();
  75.         jMenu1 = new javax.swing.JMenu();
  76.         jMenuItem1 = new javax.swing.JMenuItem();
  77.         jSeparator1 = new javax.swing.JSeparator();
  78.         closeWindowMI = new javax.swing.JMenuItem();
  79.         jScrollPane1.setBorder(null);
  80.         sourceTree.setModel(createTreeModel());
  81.         sourceTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
  82.             public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
  83.                 sourceTreeValueChanged(evt);
  84.             }
  85.         });
  86.         jScrollPane1.setViewportView(sourceTree);
  87.         jScrollPane2.setBorder(null);
  88.         oldEditorPane.setEditable(false);
  89.         jScrollPane2.setViewportView(oldEditorPane);
  90.         getContentPane().setLayout(new java.awt.GridBagLayout());
  91.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  92.         jSplitPane1.setBorder(null);
  93.         jSplitPane1.setDividerLocation(150);
  94.         JXTitledPanel tp = new JXTitledPanel("Sources");
  95.         tp.setContentContainer(jScrollPane1);
  96.         jSplitPane1.setLeftComponent(tp);
  97.         tp = new JXTitledPanel("Editor");
  98.         tp.setContentContainer(jScrollPane2);
  99.         jSplitPane1.setRightComponent(tp);
  100.         gridBagConstraints = new java.awt.GridBagConstraints();
  101.         gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
  102.         gridBagConstraints.weightx = 1.0;
  103.         gridBagConstraints.weighty = 1.0;
  104.         gridBagConstraints.insets = new java.awt.Insets(12, 12, 11, 11);
  105.         getContentPane().add(jSplitPane1, gridBagConstraints);
  106.         jMenu1.setText("Menu");
  107.         jMenuItem1.setText("Print");
  108.         jMenu1.add(jMenuItem1);
  109.         jMenu1.add(jSeparator1);
  110.         closeWindowMI.setText("Close Window");
  111.         closeWindowMI.addActionListener(new java.awt.event.ActionListener() {
  112.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  113.                 closeWindowMIActionPerformed(evt);
  114.             }
  115.         });
  116.         jMenu1.add(closeWindowMI);
  117.         jMenuBar1.add(jMenu1);
  118.         setJMenuBar(jMenuBar1);
  119.         pack();
  120.     }
  121.     // </editor-fold>//GEN-END:initComponents
  122.     private void sourceTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_sourceTreeValueChanged
  123.         //get the selected node and if it is a file, open it in the source editor
  124.         TreePath path = sourceTree.getSelectionPath();
  125.         TreeNode node = (TreeNode)path.getLastPathComponent();
  126.         if (node instanceof FileTreeNode) {
  127.             File f = (File)((FileTreeNode)node).getUserObject();
  128.             if (f.isFile()) {
  129.                 //read the contents of the file into a String
  130.                 try {
  131. //                    StringBuilder buffer = new StringBuilder();
  132. //                    byte[] bytes = new byte[1024];
  133. //                    int length = -1;
  134. //                    InputStream is = new FileInputStream(f);
  135. //                    while ((length = is.read(bytes)) != -1) {
  136. //                        buffer.append(new String(bytes, 0, length));
  137. //                    }
  138. //                    oldEditorPane.setEditorKit(new RTFEditorKit());
  139. //                    oldEditorPane.setText(buffer.toString());
  140.                     oldEditorPane.setPage(f.toURL());
  141.                 } catch (Exception e) {
  142.                     e.printStackTrace();
  143.                 }
  144.             }
  145.         }
  146.     }//GEN-LAST:event_sourceTreeValueChanged
  147.     private void closeWindowMIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeWindowMIActionPerformed
  148.         setVisible(false);
  149.     }//GEN-LAST:event_closeWindowMIActionPerformed
  150.     
  151.     // Variables declaration - do not modify//GEN-BEGIN:variables
  152.     private javax.swing.JMenuItem closeWindowMI;
  153.     private javax.swing.JMenu jMenu1;
  154.     private javax.swing.JMenuBar jMenuBar1;
  155.     private javax.swing.JMenuItem jMenuItem1;
  156.     private javax.swing.JScrollPane jScrollPane1;
  157.     private javax.swing.JScrollPane jScrollPane2;
  158.     private javax.swing.JSeparator jSeparator1;
  159.     private javax.swing.JSplitPane jSplitPane1;
  160.     private javax.swing.JEditorPane oldEditorPane;
  161.     private javax.swing.JTree sourceTree;
  162.     // End of variables declaration//GEN-END:variables
  163.     private TreeModel createTreeModel() {
  164.         DefaultMutableTreeNode root = new DefaultMutableTreeNode("Sources");
  165.         createDirectory(root, rootDir);
  166.         return new DefaultTreeModel(root);
  167.     }
  168.     
  169.     private void createDirectory(DefaultMutableTreeNode dirNode, File rootDir) {
  170.         if (rootDir != null && dirNode != null) {
  171.             for (File f : rootDir.listFiles()) {
  172.                 if (f.isDirectory()) {
  173.                     DefaultMutableTreeNode dir = new FileTreeNode(f);
  174.                     dirNode.add(dir);
  175.                     createDirectory(dir, f);
  176.                 } else if (f.isFile()) {
  177.                     DefaultMutableTreeNode file = new FileTreeNode(f);
  178.                     dirNode.add(file);
  179.                 }
  180.             }
  181.         }
  182.     }
  183.     
  184.     private static final class FileTreeNode extends DefaultMutableTreeNode {
  185.         public FileTreeNode(File f) {
  186.             super(f);
  187.         }
  188.         
  189.         public String toString() {
  190.             File f = (File)getUserObject();
  191.             if (f.isDirectory()) {
  192.                 return ((File)getUserObject()).getName() + "/";
  193.             } else {
  194.                 return ((File)getUserObject()).getName();
  195.             }
  196.         }
  197.     }
  198.     
  199. }