import   java.awt.*;   
  import   java.awt.event.*;   
  import   javax.swing.*;   
  import   javax.swing.tree.*; 
 
public class Test extends JFrame implements ActionListener {
   private JSplitPane jSplitPane1;
   private JScrollPane jScrollPane1;
   private JTree tree; 
   private JPanel jPanel1;
   private JToolBar jToolBar1;
   private JButton jButton1,jButton2,jButton3,jButton4,jButton5;
   private JMenuBar jMenuBar1;
   private JMenu jMenu1,jMenu2;
   private DefaultTreeModel model;
 
    public Test() {
        JFrame f = new JFrame("Snowman Cad");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jSplitPane1 = new JSplitPane();
        jScrollPane1 = new JScrollPane();
        jPanel1 = new JPanel();
        jToolBar1 = new JToolBar();
        jButton1 = new JButton();
        jButton2 = new JButton();
        jButton3 = new JButton();
        jButton4 = new JButton();
        jButton5 = new JButton();
        jMenuBar1 = new JMenuBar();
        jMenu1 = new JMenu();
        jMenu2 = new JMenu();
        
        TreeNode root = makeSampleTree();   
        model = new DefaultTreeModel(root);   
        tree = new JTree(model);   
        tree.setEditable(true); 
        
        f.setLayout(new BorderLayout());
        jSplitPane1.setRightComponent(jPanel1);
        jScrollPane1.setViewportView(tree);
        jSplitPane1.setLeftComponent(jScrollPane1);
 
        f.getContentPane().add(jSplitPane1, BorderLayout.CENTER);
 
        jButton1.setText("remove");
        jButton1.addActionListener(this);
        jToolBar1.add(jButton1);
        
        jButton2.setText("addSibling");
        jButton2.addActionListener(this);
        jToolBar1.add(jButton2);
        
        jButton3.setText("addChild");
        jButton3.addActionListener(this);
        jToolBar1.add(jButton3);
        
        jButton4.setText("Group");
        jToolBar1.add(jButton4);
        jButton5.setText("UnGroup");
        jToolBar1.add(jButton5);
 
        f.getContentPane().add(jToolBar1,BorderLayout.SOUTH);
 
        jMenu1.setText("file");
        jMenuBar1.add(jMenu1);
        JMenuItem menuItem1 = new JMenuItem("exit",KeyEvent.VK_E);
        jMenu1.add(menuItem1);
        menuItem1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
     System.exit(0);
       }
   });
 
        
        jMenu2.setText("shapes");
        jMenuBar1.add(jMenu2);
        JMenuItem menuItem2 = new JMenuItem("Remove",KeyEvent.VK_R);
        jMenu2.add(menuItem2);
        menuItem2.addActionListener(this);
 
        
        JMenuItem menuItem3 = new JMenuItem("Group",KeyEvent.VK_G);
        jMenu2.add(menuItem3);
        menuItem3.addActionListener(this);
        
        JMenuItem menuItem4 = new JMenuItem("Ungroup",KeyEvent.VK_U);
        jMenu2.add(menuItem4);
        menuItem4.addActionListener(this);
        
        f.getContentPane().add(jMenuBar1, BorderLayout.NORTH);
        f.pack();
        f.setVisible(true);
    }
    
    public TreeNode makeSampleTree() {     
            DefaultMutableTreeNode root = new DefaultMutableTreeNode("Default");  
              
            DefaultMutableTreeNode composite1 = new DefaultMutableTreeNode("Graphic Composite1");   
            root.add(composite1);  
            DefaultMutableTreeNode composite2 =  new DefaultMutableTreeNode("Graphic Composite2");   
            root.add(composite2); 
            DefaultMutableTreeNode rectangle1 = new DefaultMutableTreeNode("Rectangle1");   
            composite1.add(rectangle1);     
            DefaultMutableTreeNode rectangle2 = new DefaultMutableTreeNode("Rectangle2");   
            composite1.add(rectangle2); 
            DefaultMutableTreeNode circle1 = new DefaultMutableTreeNode("Circle1");   
            composite1.add(circle1);
            DefaultMutableTreeNode circle2 = new DefaultMutableTreeNode("Circle2");   
            composite1.add(circle2);
            DefaultMutableTreeNode rectangle3 = new DefaultMutableTreeNode("Rectangle3");   
            composite1.add(rectangle3);
            DefaultMutableTreeNode rectangle4 = new DefaultMutableTreeNode("Rectangle4");   
            composite1.add(rectangle4);
                 
            DefaultMutableTreeNode text = new DefaultMutableTreeNode("Text");   
            composite2.add(text);    
            return root;   
     }  
     
    public void actionPerformed(ActionEvent event) {     
            DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)   
            tree.getLastSelectedPathComponent();   
              if (selectedNode  == null) return;   
              if (event.getSource().equals(jButton1)) {     
                 if (selectedNode.getParent() != null)   
                    model.removeNodeFromParent(selectedNode);   
                    return;   
                 }   
    
              //   add   new   node   as   sibling   or   child   
              DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");   
                if (event.getSource().equals(jButton2)) { 
               DefaultMutableTreeNode parent = (DefaultMutableTreeNode)selectedNode.getParent();   
                    if (parent != null) {    
                      int selectedIndex = parent.getIndex(selectedNode);   
                      model.insertNodeInto(newNode, parent, selectedIndex + 1);   
                    }   
              }   
              else if (event.getSource().equals(jButton3)) {
                    model.insertNodeInto(newNode, selectedNode,selectedNode.getChildCount());   
              }   
    
              //   now   display   new   node   
              TreeNode[] nodes = model.getPathToRoot(newNode);   
              TreePath path = new TreePath(nodes);   
              tree.scrollPathToVisible(path);   
      }   
 
        
    public static void main(String[] args){
        new Test();
    }
 
}

解决方案 »

  1.   

    因为menuitem2,3,4 和jbutton1,2,3的功能是一样的,所以我就想直接把: 
    if (event.getSource().equals(jButton1)) 
    改成: 
    if (event.getSource().equals(jButton1) || event.getSource().equals(menuItem2) ) 
    但是运行后提示说找不到menuitem2 
    请问到底要如何修改,谢谢!! 
      

  2.   

    menuitem2超出了它的作用域:public Test() ,在 public void actionPerformed(ActionEvent event)不被认识
      

  3.   

    改为:
       ........
       jButton1.setActionCommand("remove");
       ........
       menuitem2.setActionCommand("remove");
       ........   if(event.getActionCommand().equals("remove"))
             //doRemove();
      

  4.   

    zhuokai说得没错。把menuitem挪到外面就行了。
      

  5.   

    而且zhuokai的方法比我说的好,用他那个。