<1>如  DefaultMutableTreeNode node1=new DefaultMutableTreeNode("谢谢");
如何从谢谢,得到节点的名字 node1,有没有什么函数?
<2>getuserobjectpath是从根节点到任意节点路径有没有从任意节点到任意节点的路径函数,或者如何实现?
<3>我的树是用数据库中数据生成的,如下
DefaultMutableTreeNode page[]=new DefaultMutableTreeNode[200];
page[]已经设成全局变量了可是   for(int i=1;i<=y;i++)  
                          {rs14.absolute(i);
                           pag=rs14.getString("pageno");
                  page[i+in]=new DefaultMutableTreeNode(pag);
                  page[im].add(page[i+in]);
 位置1----------  System.out.println(page[i+in].getUserObject());}
          位置2------------System.out.println(page[i+in].getUserObject());
在位置1程序运行正常,如果是位置2,编译无错,运行时系统提示
Exception in thread "main" java.lang.NullPointerException
at jtree.<init><jtree.java:120>
at jtree.main<jtree.java:141>
位置2就是120行,141行是main函数,不知道怎么回事,如何修改呢?
好像page[]只在我赋值的{}里面可用,希望明白人指点一下!

解决方案 »

  1.   

    1.好像没有吧。不过你可以把节点的名字放到一个数组里面。数组里面的元素可以和树的row对应。通过谢谢得到节点在树的row。然后到数组里面取节点的名字。
    2。重写。
    3。迷糊
      

  2.   

    你可以自己写一个类来表示每个结点,这个类中属性可以有名称,路径等等;
    再写上方法:
    取得父结点();
    子结点的方法();
    增加删除子结点的方法();
    等等
    我只是说个大概意思吧
    给个例子给你吧,其实我也没研究的非常清楚
    AnimatedIconTreeExample.java:
    ----------------------------------------------
    /* (swing1.1.1beta2) */
    package examples;import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.image.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import tree.*;/**
     * @version 1.0 06/20/99
     */
    public class AnimatedIconTreeExample extends JFrame {  public AnimatedIconTreeExample() {
        super("AnimatedIconTreeExample");
        String[] strs = {"CARNIVORA",                       // 0
          "Felidae",                        // 1
            "Acinonyx jutatus  (cheetah)",  // 2
            "Panthera leo  (lion)",         // 3
          "Canidae",                        // 4
            "Canis lupus  (wolf)",          // 5
            "Lycaon pictus  (lycaon)",      // 6
            "Vulpes Vulpes  (fox)"};        // 7    IconNode[] nodes = new IconNode[strs.length];
        for (int i=0;i<strs.length;i++) {
          nodes[i] = new IconNode(strs[i]);
        }
        nodes[0].add(nodes[1]);
        nodes[0].add(nodes[4]);
        nodes[1].add(nodes[2]);
        nodes[1].add(nodes[3]);
        nodes[4].add(nodes[5]);
        nodes[4].add(nodes[6]);
        nodes[4].add(nodes[7]);    nodes[2].setIcon(new ImageIcon("images/3-119.gif"));
        nodes[3].setIcon(new ImageIcon("images/3-119.gif"));
        nodes[5].setIcon(new ImageIcon("images/3-6.gif"));
        nodes[6].setIcon(new ImageIcon("images/3-6.gif"));
        nodes[7].setIcon(new ImageIcon("images/3-6.gif"));    JTree tree = new JTree( nodes[0] );
        tree.setCellRenderer(new IconNodeRenderer());
        setImageObserver(tree, nodes);    JScrollPane sp = new JScrollPane(tree);
        getContentPane().add(sp, BorderLayout.CENTER);
      }  private void setImageObserver(JTree tree,IconNode[] nodes) {
        for (int i=0;i<nodes.length;i++) {
          ImageIcon icon = (ImageIcon)nodes[i].getIcon();
          if (icon != null) {
            icon.setImageObserver(new NodeImageObserver(tree, nodes[i]));
          }
        }
      }  class NodeImageObserver implements ImageObserver {
        JTree            tree;
        DefaultTreeModel model;
        TreeNode         node;    NodeImageObserver(JTree tree,TreeNode node) {
          this.tree  = tree;
          this.model = (DefaultTreeModel)tree.getModel();
          this.node  = node;
        }    public boolean imageUpdate(Image img, int flags,
           int x, int y, int w, int h) {
          if ((flags & (FRAMEBITS|ALLBITS)) != 0) {
            TreePath path = new TreePath(model.getPathToRoot(node));
            Rectangle rect = tree.getPathBounds(path);
            if (rect != null) {
              tree.repaint(rect);
            }
          }
          return (flags & (ALLBITS|ABORT)) == 0;
        }
      }  public static void main(String args[]) {
        AnimatedIconTreeExample frame = new AnimatedIconTreeExample();
        frame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {System.exit(0);}
        });
        frame.setSize(280, 200);
        frame.setVisible(true);
      }
    }
    ------------------------------------------------
      

  3.   

    CheckNode.java:/*  (swing1.1) */package tree;
    import java.io.*;
    import java.util.*;
    import javax.swing.tree.*;
    import attribute.*;
    /**
     * @version 1.0 01/11/99
     */
    public class CheckNode extends DefaultMutableTreeNode {  public final static int SINGLE_SELECTION = 0;
      public final static int DIG_IN_SELECTION = 4;
      protected int selectionMode;
      protected boolean isSelected;  public CheckNode() {
        this(null);
      }  public CheckNode(Object userObject) {
        this(userObject, true, false);
      }  public CheckNode(Object userObject, boolean allowsChildren
                                        , boolean isSelected) {
        super(userObject, allowsChildren);
        this.isSelected = isSelected;
        setSelectionMode(DIG_IN_SELECTION);
      }
      public void setSelectionMode(int mode) {
        selectionMode = mode;
      }  public int getSelectionMode() {
        return selectionMode;
      }  public void setSelected(boolean isSelected) {
        this.isSelected = isSelected;    if ((selectionMode == DIG_IN_SELECTION)
            && (children != null)) {
          Enumeration enum = children.elements();
          while (enum.hasMoreElements()) {
            CheckNode node = (CheckNode)enum.nextElement();
            node.setSelected(isSelected);
          }
        }
      }  public boolean isSelected() {
        return isSelected;
      }
      // If you want to change "isSelected" by CellEditor,
      /*
      public void setUserObject(Object obj) {
        if (obj instanceof Boolean) {
          setSelected(((Boolean)obj).booleanValue());
        } else {
          super.setUserObject(obj);
        }
      }
      */}
    -----------------------------------------------------
    CheckRenderer.java:/*  swing1.1 */package tree;import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.tree.*;
    import javax.swing.plaf.ColorUIResource;
    /**
     * @version 1.1 04/24/99
     */
    public class CheckRenderer extends JPanel implements TreeCellRenderer {
      protected JCheckBox check;
      protected TreeLabel label;  public CheckRenderer() {
        setLayout(null);
        add(check = new JCheckBox());
        add(label = new TreeLabel());
        check.setBackground(UIManager.getColor("Tree.textBackground"));
        label.setForeground(UIManager.getColor("Tree.textForeground"));
      }  public Component getTreeCellRendererComponent(JTree tree, Object value,
                   boolean isSelected, boolean expanded,
                   boolean leaf, int row, boolean hasFocus) {
        String  stringValue = tree.convertValueToText(value, isSelected,
    expanded, leaf, row, hasFocus);
        setEnabled(tree.isEnabled());
        check.setSelected(((CheckNode)value).isSelected());
        label.setFont(tree.getFont());
        label.setText(stringValue);
        label.setSelected(isSelected);
        label.setFocus(hasFocus);
        if (leaf) {
          label.setIcon(UIManager.getIcon("Tree.leafIcon"));
        } else if (expanded) {
          label.setIcon(UIManager.getIcon("Tree.openIcon"));
        } else {
          label.setIcon(UIManager.getIcon("Tree.closedIcon"));
        }
        return this;
      }  public Dimension getPreferredSize() {
        Dimension d_check = check.getPreferredSize();
        Dimension d_label = label.getPreferredSize();
        return new Dimension(d_check.width  + d_label.width,
          (d_check.height < d_label.height ?
           d_label.height : d_check.height));
      }  public void doLayout() {
        Dimension d_check = check.getPreferredSize();
        Dimension d_label = label.getPreferredSize();
        int y_check = 0;
        int y_label = 0;
        if (d_check.height < d_label.height) {
          y_check = (d_label.height - d_check.height)/2;
        } else {
          y_label = (d_check.height - d_label.height)/2;
        }
        check.setLocation(0,y_check);
        check.setBounds(0,y_check,d_check.width,d_check.height);
        label.setLocation(d_check.width,y_label);
        label.setBounds(d_check.width,y_label,d_label.width,d_label.height);
      }
      public void setBackground(Color color) {
        if (color instanceof ColorUIResource)
          color = null;
        super.setBackground(color);
      }
      public class TreeLabel extends JLabel {
        boolean isSelected;
        boolean hasFocus;    public TreeLabel() {
        }    public void setBackground(Color color) {
    if(color instanceof ColorUIResource)
        color = null;
    super.setBackground(color);
        }    public void paint(Graphics g) {
          String str;
          if ((str = getText()) != null) {
            if (0 < str.length()) {
              if (isSelected) {
                g.setColor(UIManager.getColor("Tree.selectionBackground"));
              } else {
                g.setColor(UIManager.getColor("Tree.textBackground"));
              }
              Dimension d = getPreferredSize();
              int imageOffset = 0;
              Icon currentI = getIcon();
              if (currentI != null) {
                imageOffset = currentI.getIconWidth() + Math.max(0, getIconTextGap() - 1);
              }
              g.fillRect(imageOffset, 0, d.width -1 - imageOffset, d.height);
              if (hasFocus) {
                g.setColor(UIManager.getColor("Tree.selectionBorderColor"));
                g.drawRect(imageOffset, 0, d.width -1 - imageOffset, d.height -1);
             }
            }
          }
          super.paint(g);
        }    public Dimension getPreferredSize() {
          Dimension retDimension = super.getPreferredSize();
          if (retDimension != null) {
            retDimension = new Dimension(retDimension.width + 3,
     retDimension.height);
          }
          return retDimension;
        }    public void setSelected(boolean isSelected) {
          this.isSelected = isSelected;
        }    public void setFocus(boolean hasFocus) {
          this.hasFocus = hasFocus;
        }
      }
    }
    ---------------------------------------
    CanEnable.java:
    /*
     * (swing1.1)
     *
     */package attribute;
    /**
     * @version 1.0 12/26/98
     */public interface CanEnable {  public void setEnabled(boolean isEnable);
      public boolean isEnabled();}
      

  4.   

    1.
    DefaultMutableTreeNode node = new DefaultMutableTreeNode(new YourUserObject("谢谢", node));
    class YourUserObject{...
    }