CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

Swill的问题,为什么我点击按钮后,JTree没有创建相应结点呢?

楼主dragonlw(潜龙在渊)2004-12-03 22:14:01 在 Java / J2SE / 基础类 提问

/*  
    *   Created   on   2004-12-3  
    *  
    *   TODO   To   change   the   template   for   this   generated   file   go   to  
    *   Window   -   Preferences   -   Java   -   Code   Style   -   Code   Templates  
    */  
  package   praInformal;  
   
  /**  
    *   @author   dragonlw  
    *  
    *   TODO   To   change   the   template   for   this   generated   type   comment   go   to  
    *   Window   -   Preferences   -   Java   -   Code   Style   -   Code   Templates  
    */  
  import   java.awt.*;  
  import   java.awt.event.*;  
  import   javax.swing.*;  
  import   javax.swing.tree.*;  
   
  import   java.util.*;  
  import   javax.swing.event.*;  
   
   
  public   class   Informal   extends   JFrame   {  
  public   Informal(){  
  super("Informal   Demo");  
  setSize(400,400);  
  setVisible(true);  
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
     
     
    //   JSplitPane   mysplit=new   JSplitPane(JSplitPane.HORIZONTAL_SPLIT,  
      // new     TreeGenerated().getTreeNode()   ,new   ReqFunc());  
     
      getContentPane().add(new     TreeGenerated().getTreeNode(),BorderLayout.WEST);  
      getContentPane().add(new   ReqFunc(),BorderLayout.CENTER);  
  }  
    public   static   void   main(String[]   args){  
    new   Informal().show();  
    }  
  }  
  class   TreeGenerated     implements   ActionListener,DocumentListener{  
    private   JTree   tree;  
    private   DefaultTreeModel   model;  
    private   JScrollPane   scrollpane;  
    private     DefaultMutableTreeNode   root;  
    public   TreeGenerated(){  
      root=new   DefaultMutableTreeNode("Project");  
      DefaultMutableTreeNode   newNode=new   DefaultMutableTreeNode("Function");  
      root.add(newNode);  
      model=new   DefaultTreeModel(root);  
      tree=new   JTree(model);  
      tree.setEditable(true);  
      scrollpane=new   JScrollPane(tree);  
       
    }  
   
    public   void   actionPerformed(ActionEvent   o){  
    if(o.getSource()==ReqFunc.getOk()){  
     
    }  
    if(o.getSource()==ReqFunc.getDecompose()){  
    DefaultMutableTreeNode   selectedNode=(DefaultMutableTreeNode)  
                tree.getLastSelectedPathComponent();  
           
                if(selectedNode==null)    
                selectedNode=root;//do   you   select   a   treenode?  
                    DefaultMutableTreeNode   newNode=new   DefaultMutableTreeNode("New");  
                  model.insertNodeInto(newNode,selectedNode,selectedNode.getChildCount());  
          //now   display   new   node  
                TreeNode[]   nodes=model.getPathToRoot(newNode);  
                TreePath   path=new   TreePath(nodes);  
                tree.scrollPathToVisible(path);    
    }  
    if(o.getSource()==ReqFunc.getNextFunc()){  
                  DefaultMutableTreeNode   selectedNode=(DefaultMutableTreeNode)  
                                  tree.getLastSelectedPathComponent();  
                                  if(selectedNode==null)return;//do   you   select   a   treenode?  
            DefaultMutableTreeNode   parent=(DefaultMutableTreeNode)selectedNode.getParent();  
            if(parent==null)return;//is   root?  
            DefaultMutableTreeNode   newNode=new   DefaultMutableTreeNode("New");  
            int   selectedIndex=parent.getIndex(selectedNode);//node's   parent   wants   to   caculate                 the   index   of   the   selectedNode  
            model.insertNodeInto(newNode,parent,selectedIndex+1);  
            //now   display   new   node  
            TreeNode[]   nodes   =model.getPathToRoot(newNode);  
            TreePath   path=new   TreePath(nodes);  
            tree.scrollPathToVisible(path);  
      }  
    }  
  public   JScrollPane   getTreeNode(){  
  return   scrollpane;  
  }  
     
    public   void   changedUpdate(DocumentEvent   o){  
     
    }  
    public   void   insertUpdate(DocumentEvent   o){  
     
    }  
    public   void   removeUpdate(DocumentEvent   o){  
     
    }  
  }  
   
  class   ReqFunc   extends   JPanel   {  
     
  class   MyDocument   implements   DocumentListener{  
  //why   can't   we   use   the   anonymous   class   here  
    public   void   changedUpdate(DocumentEvent   o){  
            nameChanged();  
    }  
    public   void   insertUpdate(DocumentEvent   o){  
      nameChanged();  
    }  
    public   void   removeUpdate(DocumentEvent   o){  
      nameChanged();  
    }  
  }  
     
  TreeGenerated   treeNode=new   TreeGenerated();  
  public   ReqFunc(){  
   
  this.setLayout(new   BorderLayout());  
  jTextField=new   JTextField();  
  jTextField.getDocument().addDocumentListener(treeNode);  
  jTextField.getDocument().addDocumentListener(new   MyDocument());  
     
  add(jTextField,BorderLayout.NORTH);  
  JPanel   jpanel=new   JPanel();  
  jpanel.setLayout(new   FlowLayout());  
   
  nextFunc=new   JButton("NextFunction");  
  nextFunc.setEnabled(false);  
  nextFunc.addActionListener(treeNode);  
  /*    
    *   nextFunc.addActionListener(new   ActionListener(){  
  public   void   actionPerformed(ActionEvent   o){  
     
  }  
  });  
  */  
  decompose=new   JButton("Decompose");  
  decompose.setEnabled(false);  
  decompose.addActionListener(treeNode);  
  /*    
    *   decompose.addActionListener(new   ActionListener(){  
  public   void   actionPerformed(ActionEvent   o){  
     
  }  
  });  
  */  
  ok=new   JButton("Save");  
  ok.setEnabled(false);  
   
  ok.addActionListener(new   ActionListener(){  
  public   void   actionPerformed(ActionEvent   o){  
  ok.setEnabled(false);  
  decompose.setEnabled(true);  
  nextFunc.setEnabled(true);  
  }  
  });  
  ok.addActionListener(treeNode);  
   
  jpanel.add(nextFunc);  
  jpanel.add(decompose);  
  jpanel.add(ok);  
  add(jpanel,BorderLayout.SOUTH);  
  }  
          public   static   JButton   getOk(){  
          return   ok;  
          }  
          public   static   JButton   getNextFunc(){  
          return   nextFunc;  
          }  
          public   static   JButton   getDecompose(){  
          return   decompose;  
          }  
          public   void   nameChanged(){  
          ok.setEnabled(true);  
          decompose.setEnabled(false);  
          nextFunc.setEnabled(false);  
           
          }  
  private   JTextField   jTextField;  
  private   static   JButton   nextFunc,decompose,ok;  
  } 问题点数:50、回复次数:3Top

1 楼dragonlw(潜龙在渊)回复于 2004-12-03 22:17:45 得分 0

问题解决,马上给分。Top

2 楼dragonlw(潜龙在渊)回复于 2004-12-04 10:32:58 得分 0

分不够可以在给嘛,来者有分Top

3 楼febchen()回复于 2004-12-04 11:05:22 得分 50

关键在class   ReqFunc中  
  TreeGenerated   treeNode=new   TreeGenerated();  
  重新生成了对象treeNode,这个和  
  getContentPane().add(new     TreeGenerated().getTreeNode(),BorderLayout.WEST);  
  不是一个treeNode对象,所以不起作用.  
  大致改了一下,都在注释里了.  
   
  import   java.awt.*;  
  import   java.awt.event.*;  
  import   javax.swing.*;  
  import   javax.swing.tree.*;  
   
  import   java.util.*;  
  import   javax.swing.event.*;  
   
   
  public   class   Informal   extends   JFrame   {  
  public   TreeGenerated   tg;     //这个对象单独生成  
  public   Informal(){  
  super("Informal   Demo");  
  setSize(400,400);  
  setVisible(true);  
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
     
     
    //   JSplitPane   mysplit=new   JSplitPane(JSplitPane.HORIZONTAL_SPLIT,  
      // new     TreeGenerated().getTreeNode()   ,new   ReqFunc());  
      tg=new   TreeGenerated();           //实例化  
      getContentPane().add(tg.getTreeNode(),BorderLayout.WEST);     //获取scrollPane  
      getContentPane().add(new   ReqFunc(this),BorderLayout.CENTER);   //将Informal类传入ReqFunc中  
  }  
    public   static   void   main(String[]   args){  
    new   Informal().show();  
    }  
  }  
  class   TreeGenerated     implements   ActionListener,DocumentListener{  
    private   JTree   tree;  
    private   DefaultTreeModel   model;  
    private   JScrollPane   scrollpane;  
    private     DefaultMutableTreeNode   root;  
    public   TreeGenerated(){  
      root=new   DefaultMutableTreeNode("Project");  
      DefaultMutableTreeNode   newNode=new   DefaultMutableTreeNode("Function");  
      root.add(newNode);  
      model=new   DefaultTreeModel(root);  
      tree=new   JTree(model);  
      tree.setEditable(true);  
      scrollpane=new   JScrollPane(tree);  
       
    }  
   
    public   void   actionPerformed(ActionEvent   o){  
    if(o.getSource()==ReqFunc.getOk()){  
     
    }  
    if(o.getSource()==ReqFunc.getDecompose()){  
    DefaultMutableTreeNode   selectedNode=(DefaultMutableTreeNode)  
                tree.getLastSelectedPathComponent();  
           
                if(selectedNode==null)    
                selectedNode=root;//do   you   select   a   treenode?  
                    DefaultMutableTreeNode   newNode=new   DefaultMutableTreeNode("New");  
                  model.insertNodeInto(newNode,selectedNode,selectedNode.getChildCount());  
          //now   display   new   node  
                TreeNode[]   nodes=model.getPathToRoot(newNode);  
                TreePath   path=new   TreePath(nodes);  
                tree.scrollPathToVisible(path);    
    }  
    if(o.getSource()==ReqFunc.getNextFunc()){  
                  DefaultMutableTreeNode   selectedNode=(DefaultMutableTreeNode)  
                                  tree.getLastSelectedPathComponent();  
                                  if(selectedNode==null)return;//do   you   select   a   treenode?  
            DefaultMutableTreeNode   parent=(DefaultMutableTreeNode)selectedNode.getParent();  
            if(parent==null)return;//is   root?  
            DefaultMutableTreeNode   newNode=new   DefaultMutableTreeNode("New");  
            int   selectedIndex=parent.getIndex(selectedNode);//node's   parent   wants   to   caculate                 the   index   of   the   selectedNode  
            model.insertNodeInto(newNode,parent,selectedIndex+1);  
            //now   display   new   node  
            TreeNode[]   nodes   =model.getPathToRoot(newNode);  
            TreePath   path=new   TreePath(nodes);  
            tree.scrollPathToVisible(path);  
      }  
    }  
  public   JScrollPane   getTreeNode(){  
  return   scrollpane;  
  }  
     
    public   void   changedUpdate(DocumentEvent   o){  
     
    }  
    public   void   insertUpdate(DocumentEvent   o){  
     
    }  
    public   void   removeUpdate(DocumentEvent   o){  
     
    }  
  }  
   
  class   ReqFunc   extends   JPanel   {  
  Informal   mf;     //准备接收Informal对象  
    TreeGenerated   treeNode;  
  class   MyDocument   implements   DocumentListener{  
  //why   can't   we   use   the   anonymous   class   here  
    public   void   changedUpdate(DocumentEvent   o){  
            nameChanged();  
    }  
    public   void   insertUpdate(DocumentEvent   o){  
      nameChanged();  
    }  
    public   void   removeUpdate(DocumentEvent   o){  
      nameChanged();  
    }  
  }  
     
   
  public   ReqFunc(Informal   mf){     //构造时传入Informal对象  
  this.mf=mf;  
  treeNode=mf.tg;                           //获取Informal中的TreeNode  
  this.setLayout(new   BorderLayout());  
  jTextField=new   JTextField();  
  jTextField.getDocument().addDocumentListener(treeNode);  
  jTextField.getDocument().addDocumentListener(new   MyDocument());  
     
  add(jTextField,BorderLayout.NORTH);  
  JPanel   jpanel=new   JPanel();  
  jpanel.setLayout(new   FlowLayout());  
   
  nextFunc=new   JButton("NextFunction");  
  nextFunc.setEnabled(false);  
  nextFunc.addActionListener(treeNode);  
  /*    
    *   nextFunc.addActionListener(new   ActionListener(){  
  public   void   actionPerformed(ActionEvent   o){  
     
  }  
  });  
  */  
  decompose=new   JButton("Decompose");  
  decompose.setEnabled(false);  
  decompose.addActionListener(treeNode);  
  /*    
    *   decompose.addActionListener(new   ActionListener(){  
  public   void   actionPerformed(ActionEvent   o){  
     
  }  
  });  
  */  
  ok=new   JButton("Save");  
  ok.setEnabled(false);  
   
  ok.addActionListener(new   ActionListener(){  
  public   void   actionPerformed(ActionEvent   o){  
  ok.setEnabled(false);  
  decompose.setEnabled(true);  
  nextFunc.setEnabled(true);  
  }  
  });  
  ok.addActionListener(treeNode);  
   
  jpanel.add(nextFunc);  
  jpanel.add(decompose);  
  jpanel.add(ok);  
  add(jpanel,BorderLayout.SOUTH);  
  }  
          public   static   JButton   getOk(){  
          return   ok;  
          }  
          public   static   JButton   getNextFunc(){  
          return   nextFunc;  
          }  
          public   static   JButton   getDecompose(){  
          return   decompose;  
          }  
          public   void   nameChanged(){  
          ok.setEnabled(true);  
          decompose.setEnabled(false);  
          nextFunc.setEnabled(false);  
           
          }  
  private   JTextField   jTextField;  
  private   static   JButton   nextFunc,decompose,ok;  
  }  
  Top

相关问题

  • JTree结点编辑问题
  • 在jtree结点上的双击事件
  • 如何用Jtree实现空结点与非空结点有相同的图标?
  • 如何判断JTree中一个结点是否已经展开?
  • Jbuilder 2005中JTree的结点怎么更改啊?大家帮忙啊,谢谢啊!
  • 按钮!
  • 按钮
  • 按钮
  • 子结点与父结点
  • 按钮内还有按钮

关键词

  • swing
  • treegenerated
  • reqfunc
  • nextfunc
  • decompose
  • defaultmutabletreenode
  • selectednode
  • documentevent
  • setenabled
  • jsplitpane

得分解答快速导航

  • 帖主:dragonlw
  • febchen

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo