⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s20.htm

📁 Java2Swingt界面设计
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            <p>&nbsp;</p>            <p align="center"><b>例 20-4 JTree文件查看器</b></p>            <hr size="1" noshade>              import javax.swing.*;<br>              import javax.swing.event.*;<br>              import javax.swing.tree.*;<br>              import java.awt.*;<br>              import java.awt.event.*;<br>              import java.io.File;<br>              import java.util.EventObject;<p>  public class Test extends JFrame {<br>                 public Test() {<br>                  final JTree tree = new JTree(createTreeModel());<br>                  JScrollPane scrollPane = new JScrollPane(tree);</p>            <p>     getContentPane().add(scrollPane, BorderLayout.CENTER);<br>                  getContentPane().add(GJApp.getStatusArea(), <br>                  BorderLayout.SOUTH);</p>            <p>     tree.addTreeExpansionListener(new TreeExpansionListener(){<br>                   public void treeCollapsed(TreeExpansionEvent e) {<br>                   }<br>                   public void treeExpanded(TreeExpansionEvent e) {<br>                    UpdateStatus updateThread;<br>                    TreePath path = e.getPath();<br>                    FileNode node = (FileNode)<br>                    path.getLastPathComponent();</p>            <p>       if( ! node.isExplored()) {<br>                     DefaultTreeModel model = (DefaultTreeModel)tree.getModel();<br>                     GJApp.updateStatus(&quot;exploring ...&quot;);</p>            <p>        UpdateStatus us = new UpdateStatus();<br>                     us.start();</p>            <p>        node.explore();<br>                     model.nodeStructureChanged(node);<br>                    }<br>                   }<br>                   class UpdateStatus extends Thread {<br>                    public void run() {<br>                     try { Thread.currentThread().sleep(450); }<br>                     catch(InterruptedException e) { }</p>            <p>        SwingUtilities.invokeLater(new Runnable() {<br>                      public void run() {<br>                       GJApp.updateStatus(&quot; &quot;);<br>                      }<br>                     });<br>                    }<br>                   }<br>                  });<br>                 }<br>                 private DefaultTreeModel createTreeModel() {<br>                  File root = new File(&quot;E:/&quot;);<br>                  FileNode rootNode = new FileNode(root);</p>            <p>     rootNode.explore();<br>                  return new DefaultTreeModel(rootNode);<br>                 }<br>                 public static void main(String args[]) {<br>                  GJApp.launch(new Test(),&quot;JTree File Explorer&quot;,<br>                  300,300,450,400);<br>                 }<br>                }<br>                class FileNode extends DefaultMutableTreeNode {<br>                 private boolean explored = false;</p>            <p>    public FileNode(File file) { <br>                  setUserObject(file); <br>                 }<br>                 public boolean getAllowsChildren() { return isDirectory(); }<br>                 public boolean isLeaf() { return !isDirectory(); }<br>                 public File getFile() { return (File)getUserObject(); }</p>            <p>    public boolean isExplored() { return explored; }</p>            <p>    public boolean isDirectory() {<br>                  File file = getFile();<br>                  return file.isDirectory();<br>                 }<br>                 public String toString() {<br>                  File file = (File)getUserObject();<br>                  String filename = file.toString();<br>                  int index = filename.lastIndexOf(File.separator);</p>            <p>     return (index != -1 &amp;&amp; index != filename.length()-1)               ? <br>                  filename.substring(index+1) : <br>                  filename;<br>                 }<br>                 public void explore() {<br>                  if(!isDirectory())<br>                  return;</p>            <p>     if(!isExplored()) {<br>                   File file = getFile();<br>                   File[] children = file.listFiles();</p>            <p>      for(int i=0; i &lt; children.length; ++i) <br>                   add(new FileNode(children[i]));</p>            <p>      explored = true;<br>                  }<br>                 }<br>                }<br>                class GJApp extends WindowAdapter {<br>                 static private JPanel statusArea = new JPanel();<br>                 static private JLabel status = new JLabel(&quot; &quot;);</p>            <p>    public static void launch(final JFrame f, String title,<br>                 final int x, final int y, <br>                 final int w, int h) {<br>                  f.setTitle(title);<br>                  f.setBounds(x,y,w,h);<br>                  f.setVisible(true);</p>            <p>     statusArea.setBorder(BorderFactory.createEtchedBorder());<br>                  statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));<br>                  statusArea.add(status);<br>                  status.setHorizontalAlignment(JLabel.LEFT);</p>            <p>     f.setDefaultCloseOperation(<br>                  WindowConstants.DISPOSE_ON_CLOSE);</p>            <p>     f.addWindowListener(new WindowAdapter() {<br>                   public void windowClosed(WindowEvent e) {<br>                    System.exit(0);<br>                   }<br>                  });<br>                 }<br>                 static public JPanel getStatusArea() {<br>                  return statusArea;<br>                 }<br>                 static public void updateStatus(String s) {<br>                  status.setText(s);<br>                 }<br>                }</p>            <hr size="1" noshade>            <p>20.3 树路径</p>            <p align="center"><b>例20-5 使用树路径</b></p>            <hr size="1" noshade>            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.tree.*;<br>            import java.awt.*;<br>            //import java.awt.event.*;            <p>public class Test extends JApplet {<br>              JTree tree = new JTree();<br>              DefaultTreeModel model = (DefaultTreeModel)tree.getModel();<br>              TreeSelectionModel selectionModel = tree.getSelectionModel();</p>            <p> public void init() {<br>              getContentPane().add(tree, BorderLayout.CENTER);</p>            <p> tree.addTreeSelectionListener(<br>              new TreeSelectionListener() {<br>              public void valueChanged(TreeSelectionEvent e) {<br>              TreePath path = e.getNewLeadSelectionPath();</p>            <p> if(path == null)<br>              System.out.println(&quot;Selection Cleared&quot;);<br>              else {<br>              TreePath parentPath = path.getParentPath();<br>              Object <br>              lastNode = path.getLastPathComponent(),<br>              firstNode= path.getPathComponent(0);</p>            <p> System.out.println(&quot;Path: &quot; + path + <br>              &quot; has &quot; + <br>              path.getPathCount() + <br>              &quot; nodes&quot;);<br>              System.out.println(&quot;Last Path Component: &quot; +<br>              lastNode.toString());<br>              System.out.println(&quot;First Path Component: &quot; +<br>              firstNode.toString());<br>              System.out.println(&quot;Parent Path: &quot; + <br>              parentPath);</p>            <p> // the following if statement is always true </p>            <p> if(parentPath.isDescendant(path)) {<br>              System.out.println(parentPath + <br>              &quot; is a descendant of &quot; + path);</p>            <p> }<br>              DefaultMutableTreeNode last =<br>              (DefaultMutableTreeNode)lastNode;<br>              DefaultMutableTreeNode first =<br>              (DefaultMutableTreeNode)lastNode;</p>            <p> if(first.isNodeDescendant(last)) {<br>              System.out.println(<br>              &quot;last is descendant of first&quot;);<br>              <br>              }<br>              System.out.println(&quot;&quot;);<br>              }</p>            <p> }<br>              });<br>              }<br>              }</p>            <hr size="1" noshade>            <p> 20.4 树模型</p>            <p>&nbsp;</p>            <p align="center"><b>例20-6 添加和删除节点</b></p>            <hr size="1" noshade>            import javax.swing.*;<br>            import javax.swing.event.*;<br>            import javax.swing.tree.*;<br>            import java.awt.*;<br>            import java.awt.event.*;            <p>public class Test extends JFrame {<br>              JTree tree = new JTree();<br>              DefaultTreeModel model = (DefaultTreeModel)tree.getModel();<br>              TreeSelectionModel selectionModel = tree.getSelectionModel();</p>            <p> JButton removeButton = new JButton(&quot;Remove selected node&quot;);<br>              JButton addButton = new JButton(&quot;Add node&quot;);</p>            <p> public Test() {<br>              Container contentPane = getContentPane();</p>            <p> selectionModel.setSelectionMode(<br>              TreeSelectionModel.SINGLE_TREE_SELECTION);</p>            <p> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br>              contentPane.add(tree, BorderLayout.CENTER);</p>            <p> tree.addTreeSelectionListener(<br>              new TreeSelectionListener() {<br>              public void valueChanged(TreeSelectionEvent e) {<br>              TreePath path = e.getNewLeadSelectionPath();<br>              boolean nodesAreSelected = (path != null);</p>            <p> addButton.setEnabled(nodesAreSelected);<br>              removeButton.setEnabled(nodesAreSelected);<br>              }<br>              });<br>              model.addTreeModelListener(new TreeModelListener() {<br>              public void treeNodesInserted(TreeModelEvent e) {<br>              showInsertionOrRemoval(e, &quot; added to &quot;);<br>              }<br>              public void treeNodesRemoved(TreeModelEvent e) {<br>              showInsertionOrRemoval(e, &quot; removed from &quot;);<br>              }<br>              private void showInsertionOrRemoval(TreeModelEvent e,<br>              String s) {<br>              Object[] parentPath = e.getPath();<br>              int[] indexes = e.getChildIndices();<br>              Object[] children = e.getChildren();<br>              Object parent = parentPath[parentPath.length-1];</p>            <p> JOptionPane.showMessageDialog(Test.this,<br>              &quot;Node \&quot;&quot; + children[0].toString() + <br>              &quot;\&quot;&quot; + s + parent.toString() + <br>              &quot; at index &quot; + indexes[0],<br>              &quot;Node Added or Removed&quot;,<br>              JOptionPane.INFORMATION_MESSAGE);<br>              }<br>              public void treeNodesChanged(TreeModelEvent e) {}<br>              public void treeStructureChanged(TreeModelEvent e) {}<br>              });<br>              }<br>              class ControlPanel extends JPanel {<br>              public ControlPanel() {<br>              addButton.setEnabled(false);<br>              removeButton.setEnabled(false);</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -