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

📄 philosophersjtree.java

📁 java 编程源代码
💻 JAVA
字号:
// PhilosophersJTree.java
// MVC architecture using JTree with a DefaultTreeModel
package com.deitel.advjhtp1.mvc.tree;

// Java core packages
import java.awt.*;
import java.awt.event.*;
import java.util.*;

// Java extension packages
import javax.swing.*;
import javax.swing.tree.*;

public class PhilosophersJTree extends JFrame {
   
   private JTree tree;
   private DefaultTreeModel philosophers;
   private DefaultMutableTreeNode rootNode;
   
   // PhilosophersJTree constructor
   public PhilosophersJTree() 
   {
      super( "Favorite Philosophers" );
      
      // get tree of philosopher DefaultMutableTreeNodes
      DefaultMutableTreeNode philosophersNode =
         getPhilosopherTree();
      
      // create philosophers DefaultTreeModel 
      philosophers = new DefaultTreeModel( philosophersNode );
      
      // create JTree for philosophers DefaultTreeModel
      tree = new JTree( philosophers );
      
      // create JButton for adding philosophers
      JButton addButton = new JButton( "Add Philosopher" ); 
      addButton.addActionListener(
         new ActionListener() {
            
            public void actionPerformed( ActionEvent event ) 
            {
               addPhilosopher();
            }
         }
      );
      
      // create JButton for removing selected philosopher
      JButton removeButton = 
         new JButton( "Remove Selected Philosopher" );
      
      removeButton.addActionListener(
         new ActionListener() {
            
            public void actionPerformed( ActionEvent event ) 
            {               
               removeSelectedPhilosopher();
            }
         }
      );      
      
      // lay out GUI components
      JPanel inputPanel = new JPanel();
      inputPanel.add( addButton );
      inputPanel.add( removeButton );
      
      Container container = getContentPane();   
      
      container.add( new JScrollPane( tree ), 
         BorderLayout.CENTER );
      
      container.add( inputPanel, BorderLayout.NORTH );
      
      setDefaultCloseOperation( EXIT_ON_CLOSE );
      setSize( 400, 300 );
      setVisible( true );
      
   } // end PhilosophersJTree constructor
   
   // add new philosopher to selected era
   private void addPhilosopher()
   {
      // get selected era
      DefaultMutableTreeNode parent = getSelectedNode();

      // ensure user selected era first
      if ( parent == null ) {
         JOptionPane.showMessageDialog( 
            PhilosophersJTree.this, "Select an era.", 
            "Error", JOptionPane.ERROR_MESSAGE );

         return;
      }
      
      // prompt user for philosopher's name
      String name = JOptionPane.showInputDialog(
         PhilosophersJTree.this, "Enter Name:" );

      // add new philosopher to selected era
      philosophers.insertNodeInto( 
         new DefaultMutableTreeNode( name ), 
         parent, parent.getChildCount() );
       
   } // end method addPhilosopher
   
   // remove currently selected philosopher
   private void removeSelectedPhilosopher()
   {
      // get selected node
      DefaultMutableTreeNode selectedNode = getSelectedNode();
      
      // remove selectedNode from model
      if ( selectedNode != null )      
         philosophers.removeNodeFromParent( selectedNode );
   }
   
   // get currently selected node
   private DefaultMutableTreeNode getSelectedNode()
   {
      // get selected DefaultMutableTreeNode
      return ( DefaultMutableTreeNode ) 
         tree.getLastSelectedPathComponent();      
   }
   
   // get tree of philosopher DefaultMutableTreeNodes
   private DefaultMutableTreeNode getPhilosopherTree()
   {
      // create rootNode
      DefaultMutableTreeNode rootNode = 
         new DefaultMutableTreeNode( "Philosophers" );  
      
      // Ancient philosophers
      DefaultMutableTreeNode ancient = 
         new DefaultMutableTreeNode( "Ancient" );
      rootNode.add( ancient );
          
      ancient.add( new DefaultMutableTreeNode( "Socrates" ) );
      ancient.add( new DefaultMutableTreeNode( "Plato" ) );
      ancient.add( new DefaultMutableTreeNode( "Aristotle" ) );
      
      // Medieval philosophers
      DefaultMutableTreeNode medieval = 
         new DefaultMutableTreeNode( "Medieval" );
      rootNode.add( medieval );

      medieval.add( new DefaultMutableTreeNode( 
         "St. Thomas Aquinas" ) );
      
      // Renaissance philosophers
      DefaultMutableTreeNode renaissance = 
         new DefaultMutableTreeNode( "Renaissance" );
      rootNode.add( renaissance );
      
      renaissance.add( new DefaultMutableTreeNode( 
         "Thomas More" ) );

      // Early Modern philosophers
      DefaultMutableTreeNode earlyModern = 
         new DefaultMutableTreeNode( "Early Modern" );
      rootNode.add( earlyModern );

      earlyModern.add( new DefaultMutableTreeNode( 
         "John Locke" ) );

      // Enlightenment Philosophers
      DefaultMutableTreeNode enlightenment = 
         new DefaultMutableTreeNode( "Enlightenment" );
      rootNode.add( enlightenment );      

      enlightenment.add( new DefaultMutableTreeNode( 
         "Immanuel Kant" ) );
      
      // 19th Century Philosophers
      DefaultMutableTreeNode nineteenth = 
         new DefaultMutableTreeNode( "19th Century" );
      rootNode.add( nineteenth );            

      nineteenth.add( new DefaultMutableTreeNode( 
         "Soren Kierkegaard" ) );      

      nineteenth.add( new DefaultMutableTreeNode( 
         "Friedrich Nietzsche" ) );

      // 20th Century Philosophers
      DefaultMutableTreeNode twentieth = 
         new DefaultMutableTreeNode( "20th Century" );
      rootNode.add( twentieth );                  

      twentieth.add( new DefaultMutableTreeNode( 
         "Hannah Arendt" ) );   
      
      return rootNode;
      
   } // end method getPhilosopherTree
   
   // execute application
   public static void main( String args[] ) 
   {
      new PhilosophersJTree();
   }
}

/***************************************************************
 * (C) Copyright 2002 by Deitel & Associates, Inc. and         *
 * Prentice Hall. All Rights Reserved.                         *
 *                                                             *
 * DISCLAIMER: The authors and publisher of this book have     *
 * used their best efforts in preparing the book. These        *
 * efforts include the development, research, and testing of   *
 * the theories and programs to determine their effectiveness. *
 * The authors and publisher make no warranty of any kind,     *
 * expressed or implied, with regard to these programs or to   *
 * the documentation contained in these books. The authors     *
 * and publisher shall not be liable in any event for          *
 * incidental or consequential damages in connection with, or  *
 * arising out of, the furnishing, performance, or use of      *
 * these programs.                                             *
 ***************************************************************/

⌨️ 快捷键说明

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