📄 sourcebrowserwindow.java
字号:
/* * SourceBrowserWindow.java * * Created on April 5, 2005, 9:00 AM */package org.jdesktop.demo;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.Vector;import javax.swing.JFrame;import javax.swing.text.rtf.RTFEditorKit;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreeModel;import javax.swing.tree.TreeNode;import javax.swing.tree.TreePath;import org.jdesktop.swingx.JXTitledPanel;import org.jdesktop.swingx.util.WindowUtils;/** * * @author rbair */public class SourceBrowserWindow extends javax.swing.JFrame { private File rootDir; /** Creates new form SourceBrowserWindow */ public SourceBrowserWindow(File sourceRootDir) {// rootDir = new File("/usr/local/src/swinglabs-demos/swinglabs-demos/src/java"); rootDir = sourceRootDir; initComponents(); setSize(800, 600); setLocation(WindowUtils.getPointForCentering(this)); } public void setSelectedSourceFile(File sourceFile) { // Build vector of path elements File pathElement = sourceFile; Vector pathElements = new Vector(); pathElements.add(pathElement); while (!pathElement.equals(rootDir)) { pathElement = pathElement.getParentFile(); pathElements.insertElementAt(pathElement, 0); } // Now use path elements to do top-down search for corresponding tree node DefaultTreeModel treeModel = (DefaultTreeModel)sourceTree.getModel(); DefaultMutableTreeNode pathNode = (DefaultMutableTreeNode)treeModel.getRoot(); for(int i = 0; i < pathElements.size(); i++) { pathElement = (File)pathElements.get(i); for(int j = 0; j < pathNode.getChildCount(); j++) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)pathNode.getChildAt(j); if (node.getUserObject().equals(pathElement)) { pathNode = node; break; } } } sourceTree.setSelectionPath(new TreePath(pathNode.getPath())); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; jScrollPane1 = new javax.swing.JScrollPane(); sourceTree = new javax.swing.JTree(); jScrollPane2 = new javax.swing.JScrollPane(); oldEditorPane = new org.jdesktop.swingx.JXEditorPane(); jSplitPane1 = new javax.swing.JSplitPane(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); jMenuItem1 = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JSeparator(); closeWindowMI = new javax.swing.JMenuItem(); jScrollPane1.setBorder(null); sourceTree.setModel(createTreeModel()); sourceTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() { public void valueChanged(javax.swing.event.TreeSelectionEvent evt) { sourceTreeValueChanged(evt); } }); jScrollPane1.setViewportView(sourceTree); jScrollPane2.setBorder(null); oldEditorPane.setEditable(false); jScrollPane2.setViewportView(oldEditorPane); getContentPane().setLayout(new java.awt.GridBagLayout()); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jSplitPane1.setBorder(null); jSplitPane1.setDividerLocation(150); JXTitledPanel tp = new JXTitledPanel("Sources"); tp.setContentContainer(jScrollPane1); jSplitPane1.setLeftComponent(tp); tp = new JXTitledPanel("Editor"); tp.setContentContainer(jScrollPane2); jSplitPane1.setRightComponent(tp); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; gridBagConstraints.insets = new java.awt.Insets(12, 12, 11, 11); getContentPane().add(jSplitPane1, gridBagConstraints); jMenu1.setText("Menu"); jMenuItem1.setText("Print"); jMenu1.add(jMenuItem1); jMenu1.add(jSeparator1); closeWindowMI.setText("Close Window"); closeWindowMI.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeWindowMIActionPerformed(evt); } }); jMenu1.add(closeWindowMI); jMenuBar1.add(jMenu1); setJMenuBar(jMenuBar1); pack(); } // </editor-fold>//GEN-END:initComponents private void sourceTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_sourceTreeValueChanged //get the selected node and if it is a file, open it in the source editor TreePath path = sourceTree.getSelectionPath(); TreeNode node = (TreeNode)path.getLastPathComponent(); if (node instanceof FileTreeNode) { File f = (File)((FileTreeNode)node).getUserObject(); if (f.isFile()) { //read the contents of the file into a String try {// StringBuilder buffer = new StringBuilder();// byte[] bytes = new byte[1024];// int length = -1;// InputStream is = new FileInputStream(f);// while ((length = is.read(bytes)) != -1) {// buffer.append(new String(bytes, 0, length));// }// oldEditorPane.setEditorKit(new RTFEditorKit());// oldEditorPane.setText(buffer.toString()); oldEditorPane.setPage(f.toURL()); } catch (Exception e) { e.printStackTrace(); } } } }//GEN-LAST:event_sourceTreeValueChanged private void closeWindowMIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeWindowMIActionPerformed setVisible(false); }//GEN-LAST:event_closeWindowMIActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuItem closeWindowMI; private javax.swing.JMenu jMenu1; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JSeparator jSeparator1; private javax.swing.JSplitPane jSplitPane1; private javax.swing.JEditorPane oldEditorPane; private javax.swing.JTree sourceTree; // End of variables declaration//GEN-END:variables private TreeModel createTreeModel() { DefaultMutableTreeNode root = new DefaultMutableTreeNode("Sources"); createDirectory(root, rootDir); return new DefaultTreeModel(root); } private void createDirectory(DefaultMutableTreeNode dirNode, File rootDir) { if (rootDir != null && dirNode != null) { for (File f : rootDir.listFiles()) { if (f.isDirectory()) { DefaultMutableTreeNode dir = new FileTreeNode(f); dirNode.add(dir); createDirectory(dir, f); } else if (f.isFile()) { DefaultMutableTreeNode file = new FileTreeNode(f); dirNode.add(file); } } } } private static final class FileTreeNode extends DefaultMutableTreeNode { public FileTreeNode(File f) { super(f); } public String toString() { File f = (File)getUserObject(); if (f.isDirectory()) { return ((File)getUserObject()).getName() + "/"; } else { return ((File)getUserObject()).getName(); } } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -