看下下面父节点A,B,C( 后面是子节点)A AA AB
B BA BB
C AA AB我是在A中加了2个叶子AA,AB,然后把AA,BB,克隆一份加到C中,我如何选中 A下面的叶子节点,C下面2个叶子也选中,如果A下面取消选中,C下面也取消选择呢?我是在 JTree tree = new JTree();       
    tree.addTreeSelectionListener( new TreeSelectionListener()
   {
      public void valueChanged(TreeSelectionEvent e){
          //我的方法改怎么写呢?
      }
   };

解决方案 »

  1.   

    我是在A中加了2个叶子AA,AB,然后把AA,BB,克隆一份加到C中, BB是AB,笔误,谢谢
      

  2.   

    应该可以了
    import java.util.Enumeration;
    import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.event.TreeSelectionEvent;
    import javax.swing.event.TreeSelectionListener;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeNode;
    import javax.swing.tree.TreePath;class TreeFrame implements TreeSelectionListener {
    private JTree example = null;
    public TreeFrame() {
    DefaultMutableTreeNode root = new DefaultMutableTreeNode(" root ", true);
    DefaultMutableTreeNode a = new DefaultMutableTreeNode(" A ");
    root.add(a);
    a.add(new DefaultMutableTreeNode(" AA "));
    a.add(new DefaultMutableTreeNode(" AB "));
    DefaultMutableTreeNode b = new DefaultMutableTreeNode(" B ");
    root.add(b);
    b.add(new DefaultMutableTreeNode(" BA "));
    b.add(new DefaultMutableTreeNode(" BB "));
    DefaultMutableTreeNode c = new DefaultMutableTreeNode(" C ");
    root.add(c);
    c.add(new DefaultMutableTreeNode(" AA "));
    c.add(new DefaultMutableTreeNode(" AB "));
    example = new JTree(root);
    example.addTreeSelectionListener(this);
    JPanel panel = new JPanel();
    panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
    panel.add(new JScrollPane(example));
    JFrame frame = new JFrame(" JTreeDemo ");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(panel);
    frame.setSize(250, 400);
    frame.setVisible(true);
    }
    public void valueChanged(TreeSelectionEvent e) {
    example.expandPath(e.getPath());
    DefaultMutableTreeNode dm = (DefaultMutableTreeNode) e.getPath()
    .getLastPathComponent();
    for (Enumeration em = dm.children(); em.hasMoreElements();) {
    TreeNode n = (TreeNode) em.nextElement();
    TreePath visiblePath = new TreePath(((DefaultTreeModel) example
    .getModel()).getPathToRoot(n));
    example.addSelectionPath(visiblePath);
    }
    }
    }
    public class TreeTest {
    public static void main(String[] args) {
    new TreeFrame();
    }
    }
      

  3.   

    这样可以了。楼上意思可能理解错了import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTree;
    import javax.swing.event.TreeSelectionEvent;
    import javax.swing.event.TreeSelectionListener;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreeNode;
    import javax.swing.tree.TreePath;class TreeFrame implements TreeSelectionListener {
      private JTree example = null;  private List<TreeNode> allLeaf = new ArrayList<TreeNode>();  public TreeFrame() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode(" root ", true);
        DefaultMutableTreeNode a = new DefaultMutableTreeNode(" A ");
        root.add(a);
        a.add(new DefaultMutableTreeNode(" AA "));
        a.add(new DefaultMutableTreeNode(" AB "));
        DefaultMutableTreeNode b = new DefaultMutableTreeNode(" B ");
        root.add(b);
        b.add(new DefaultMutableTreeNode(" BA "));
        b.add(new DefaultMutableTreeNode(" BB "));
        DefaultMutableTreeNode c = new DefaultMutableTreeNode(" C ");
        root.add(c);
        c.add(new DefaultMutableTreeNode(" AA "));
        c.add(new DefaultMutableTreeNode(" AB "));
        example = new JTree(root);
        example.addTreeSelectionListener(this);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
        panel.add(new JScrollPane(example));
        JFrame frame = new JFrame(" JTreeDemo ");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setContentPane(panel);
        frame.setSize(250, 400);
        frame.setVisible(true);
        
        visitAllNodes(example);
      }  public void valueChanged(TreeSelectionEvent e) {
        example.expandPath(e.getPath());
        DefaultMutableTreeNode dm =
            (DefaultMutableTreeNode) e.getPath().getLastPathComponent();
        DefaultMutableTreeNode root =
            (DefaultMutableTreeNode) example.getModel().getRoot();
        for (TreeNode leaf : allLeaf) {
          if (leaf.toString().equals(dm.toString())) {
            TreePath visiblePath =
                new TreePath(((DefaultTreeModel) example.getModel())
                    .getPathToRoot(leaf));
            example.addSelectionPath(visiblePath);
          }
        }
      }  public void visitAllNodes(JTree tree) {
        DefaultMutableTreeNode root = (DefaultMutableTreeNode) tree.getModel().getRoot();
        Enumeration breadthFirst = root.breadthFirstEnumeration();
        while (breadthFirst.hasMoreElements()) {
          TreeNode node = (TreeNode) breadthFirst.nextElement();
          if (node.isLeaf()) {
            allLeaf.add(node);
          }
        }
      }
    }public class TreeTest {
      public static void main(String[] args) {
        new TreeFrame();
      }
    }