我已经做好了树节点,现在窗口左边是一个树结构,
右边是显示文字信息的地方,
请问如何实现点击左边不同树节点的时候可以在窗口右边显示节点对应的不同信息,
请问一下怎么用JAVA来实现这样的形式..
我的代码在这里:http://pan.baidu.com/share/link?shareid=2295482442&uk=2785344091..可能比较长.
我只是想知道如何用JAVA实现这样的功能,尽量举下实例吧。大家不好举例也可以根据我的代码修改下。谢谢大家了!我在百度知道上和一些论坛发了问了也没人回..没什么好的意见..希望大家帮帮忙。谢谢百度知道地址:http://zhidao.baidu.com/question/584997983.html?quesup2&oldq=1。好心人也可以在这里回,我会给知道的财富值,谢谢!!

解决方案 »

  1.   

    我写的例子,望采纳:
    package com.han;import java.awt.BorderLayout;
    import java.util.Enumeration;import javax.swing.JFrame;
    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.TreePath;
    import javax.swing.tree.TreeSelectionModel;/**
     * 处理节点选中事件
     * 
     * @author HAN
     */
    public class JTree_2 extends JFrame {
    private static final long serialVersionUID = -4187076423981270641L; public JTree_2() {
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("本地磁盘(D:)");
    DefaultMutableTreeNode nodePicture = new DefaultMutableTreeNode("图片");
    root.add(nodePicture);
    root.add(new DefaultMutableTreeNode("音乐"));
    nodePicture.add(new DefaultMutableTreeNode("千山——世博园旅游"));
    DefaultMutableTreeNode nodeSecond = new DefaultMutableTreeNode(
    "凤凰山——大鹿岛旅游");
    nodePicture.add(nodeSecond);
    nodeSecond.add(new DefaultMutableTreeNode("大浪淘沙.gif", false));
    nodeSecond.add(new DefaultMutableTreeNode("辽阔的大海.jpg", false)); DefaultTreeModel defaultTreeModel = new DefaultTreeModel(root, true);
    final JTree defaultTree = new JTree(defaultTreeModel);
    getContentPane().add(defaultTree, BorderLayout.WEST); // expand initially all nodes
    @SuppressWarnings("rawtypes")
    Enumeration enumeration = root.preorderEnumeration();
    while (enumeration.hasMoreElements()) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) enumeration
    .nextElement();
    defaultTree.expandPath(new TreePath(node.getPath()));
    } // add the tree selection listener, and print the selection path to
    // screen
    TreeSelectionModel treeSelectionModel = defaultTree.getSelectionModel();
    treeSelectionModel
    .setSelectionMode(TreeSelectionModel.CONTIGUOUS_TREE_SELECTION);
    defaultTree.addTreeSelectionListener(new TreeSelectionListener() {
    @Override
    public void valueChanged(TreeSelectionEvent e) {
    if (!defaultTree.isSelectionEmpty()) {
    TreePath[] selectionPaths = defaultTree.getSelectionPaths();
    for (int i = 0; i < selectionPaths.length; i++) {
    TreePath treePath = selectionPaths[i];
    Object[] path = treePath.getPath();
    for (int j = 0; j < path.length; j++) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path[j];
    System.out.print(node.getUserObject()
    + ((j == path.length - 1) ? "" : "-->"));
    }
    }
    System.out.println();
    }
    }
    });
    } public static void main(String[] args) {
    JTree_2 instance = new JTree_2();
    instance.setTitle("处理选中节点事件");
    instance.setVisible(true);
    instance.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    instance.pack();
    }
    }package com.han;import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Enumeration;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreePath;/**
     * This class is to enumerate all the nodes of a tree in different ways ...
     * 遍历树节点
     * @author HAN
     *
     */
    public class JTree_3 extends JFrame { /**
     * 
     */
    private static final long serialVersionUID = -4405016910342910815L;
    DefaultMutableTreeNode root;
    /**
     * 
     */
    public JTree_3() {
    root = new DefaultMutableTreeNode("ROOT");
    DefaultMutableTreeNode nodeA =  new DefaultMutableTreeNode("nodeA");
    DefaultMutableTreeNode nodeB =  new DefaultMutableTreeNode("nodeB");
    DefaultMutableTreeNode nodeC =  new DefaultMutableTreeNode("nodeC");
    root.add(nodeA);
    root.add(nodeB);
    root.add(nodeC);

    DefaultMutableTreeNode nodeAA =  new DefaultMutableTreeNode("nodeAA");
    DefaultMutableTreeNode nodeAB =  new DefaultMutableTreeNode("nodeAB");
    nodeA.add(nodeAA);
    nodeA.add(nodeAB);

    DefaultMutableTreeNode nodeCA =  new DefaultMutableTreeNode("nodeCA");
    DefaultMutableTreeNode nodeCB =  new DefaultMutableTreeNode("nodeCB");
    DefaultMutableTreeNode nodeCC =  new DefaultMutableTreeNode("nodeCC");
    nodeC.add(nodeCA);
    nodeC.add(nodeCB);
    nodeC.add(nodeCC);

    DefaultMutableTreeNode nodeCBA =  new DefaultMutableTreeNode("nodeCBA");
    DefaultMutableTreeNode nodeCBB =  new DefaultMutableTreeNode("nodeCBB");
    nodeCB.add(nodeCBA);
    nodeCB.add(nodeCBB);

    DefaultTreeModel defaultTreeModel = new DefaultTreeModel(root);
    JTree tree = new JTree(defaultTreeModel);

    @SuppressWarnings("rawtypes")
    Enumeration enumeration = root.preorderEnumeration();
    while (enumeration.hasMoreElements()) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) enumeration.nextElement();
    TreePath treePath = new TreePath(node.getPath());
    tree.expandPath(treePath);
    }

    Container container = getContentPane();
    container.add(tree, BorderLayout.WEST);
    // Dimension dimension = container.getPreferredSize();
    JPanel panel = new JPanel(new GridLayout(5, 1, 10, 10));
    JButton b1 = new JButton("按前序遍历");
    JButton b2 = new JButton("按后序遍历");
    JButton b3 = new JButton("以广度优先遍历");
    JButton b4 = new JButton("以深度优先遍历");
    JButton b5 = new JButton("遍历直属子节点");
    panel.add(b1);
    panel.add(b2);
    panel.add(b3);
    panel.add(b4);
    panel.add(b5);
    container.add(panel, BorderLayout.CENTER);

    b1.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    enumerate("按前序遍历");
    }

    });

    b2.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    enumerate("按后序遍历");
    }

    });

    b3.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    enumerate("以广度优先遍历");
    }

    });

    b4.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    enumerate("以深度优先遍历");
    }

    });

    b5.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    enumerate("遍历直属子节点");
    }

    });
    } private void enumerate(String mode) {
    @SuppressWarnings("rawtypes")
    Enumeration enumeration;
    if (mode.equals("按前序遍历")) {
    enumeration = root.preorderEnumeration();
    }else if (mode.equals("按后序遍历")) {
    enumeration = root.postorderEnumeration();
    }else if (mode.equals("以广度优先遍历")) {
    enumeration = root.breadthFirstEnumeration();
    }else if (mode.equals("以深度优先遍历")) {
    enumeration = root.depthFirstEnumeration();
    }else {
    enumeration = root.children();
    }

    System.out.println(mode + " :");
    System.out.println("_______________________________");
    while (enumeration.hasMoreElements()) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) enumeration.nextElement();
    for (int i = 0; i < node.getLevel(); i++) { // 根据节点的级别输出占位符
    System.out.print("----");
    }
    System.out.println(node.getUserObject()); // 输出节点标签
    }
    System.out.println();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
    JTree_3 instance = new JTree_3();
    instance.setTitle("遍历树节点");
    instance.setVisible(true);
    instance.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    instance.pack();
    }}
      

  2.   

    package com.han;import java.awt.BorderLayout;
    import java.awt.Container;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Enumeration;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreePath;public class JTree_5 extends JFrame {
    private static final long serialVersionUID = -7187852901157241733L; public JTree_5() {
    // TODO Auto-generated constructor stub
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("倾城爱家");
    DefaultMutableTreeNode nodeA = new DefaultMutableTreeNode("经理办公室");
    DefaultMutableTreeNode nodeB = new DefaultMutableTreeNode("人事部");
    DefaultMutableTreeNode nodeC = new DefaultMutableTreeNode("技术部");
    DefaultMutableTreeNode nodeD = new DefaultMutableTreeNode("服务部");
    DefaultMutableTreeNode nodeE = new DefaultMutableTreeNode("推广部"); DefaultMutableTreeNode nodeCA = new DefaultMutableTreeNode("网络维护部");
    DefaultMutableTreeNode nodeCB = new DefaultMutableTreeNode("应用开发部"); DefaultMutableTreeNode nodeDA = new DefaultMutableTreeNode("网络服务部");
    DefaultMutableTreeNode nodeDB = new DefaultMutableTreeNode("内勤开发部"); root.add(nodeA);
    root.add(nodeB);
    root.add(nodeC);
    root.add(nodeD);
    root.add(nodeE);
    nodeC.add(nodeCA);
    nodeC.add(nodeCB);
    nodeD.add(nodeDA);
    nodeD.add(nodeDB); final DefaultTreeModel treeModel = new DefaultTreeModel(root, true);
    final JTree tree = new JTree(treeModel); Container container = getContentPane();
    container.add(tree, BorderLayout.CENTER); @SuppressWarnings("rawtypes")
    Enumeration enumeration = root.preorderEnumeration();
    while (enumeration.hasMoreElements()) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) enumeration
    .nextElement();
    tree.expandPath(new TreePath(node.getPath()));
    } JPanel panel = new JPanel(new GridLayout(1, 5, 10, 10));
    container.add(panel, BorderLayout.SOUTH);
    JLabel label = new JLabel("名称:");
    final JTextField textField = new JTextField("测试");
    JButton button1 = new JButton("添加");
    JButton button2 = new JButton("修改");
    JButton button3 = new JButton("删除");
    panel.add(label);
    panel.add(textField);
    panel.add(button1);
    panel.add(button2);
    panel.add(button3); // add
    button1.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    DefaultMutableTreeNode node = new DefaultMutableTreeNode(
    textField.getText());
    TreePath path = tree.getSelectionPath();
    DefaultMutableTreeNode parent = (DefaultMutableTreeNode) path
    .getLastPathComponent();
    treeModel.insertNodeInto(node, parent, parent.getChildCount());
    TreePath newNodePath = path.pathByAddingChild(node);
    if (!tree.isVisible(newNodePath)) {
    tree.makeVisible(newNodePath);
    }
    tree.setSelectionPath(newNodePath);
    } }); // modify
    button2.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    TreePath path = tree.getSelectionPath();
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
    .getLastPathComponent();
    node.setUserObject(textField.getText());
    treeModel.nodeChanged(node);
    } }); // delete
    button3.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
    TreePath path = tree.getSelectionPath();
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
    .getLastPathComponent();
    if (!node.isRoot()) {
    DefaultMutableTreeNode nextSelectedNode = node
    .getNextSibling();
    if (nextSelectedNode == null) {
    nextSelectedNode = (DefaultMutableTreeNode) node
    .getParent();
    }
    tree.setSelectionPath(new TreePath(nextSelectedNode
    .getPath()));
    treeModel.removeNodeFromParent(node);
    }
    } }); } /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    JTree_5 instance = new JTree_5();
    instance.setTitle("维护企业架构");
    instance.setVisible(true);
    instance.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    instance.pack();
    }}
    package com.han;
    import java.awt.BorderLayout;
    import java.awt.Container;import javax.swing.JFrame;
    import javax.swing.JTree;
    import javax.swing.event.TreeExpansionEvent;
    import javax.swing.event.TreeExpansionListener;
    import javax.swing.event.TreeWillExpandListener;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.ExpandVetoException;
    import javax.swing.tree.TreePath;public class JTree_6 extends JFrame {
    private static final long serialVersionUID = -7110119222281494418L; public JTree_6() {
    // TODO Auto-generated constructor stub
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("倾城爱家");
    DefaultMutableTreeNode nodeA = new DefaultMutableTreeNode("经理办公室");
    DefaultMutableTreeNode nodeB = new DefaultMutableTreeNode("人事部");
    DefaultMutableTreeNode nodeC = new DefaultMutableTreeNode("技术部");
    DefaultMutableTreeNode nodeD = new DefaultMutableTreeNode("服务部");
    DefaultMutableTreeNode nodeE = new DefaultMutableTreeNode("推广部"); DefaultMutableTreeNode nodeCA = new DefaultMutableTreeNode("网络维护部");
    DefaultMutableTreeNode nodeCB = new DefaultMutableTreeNode("应用开发部"); DefaultMutableTreeNode nodeDA = new DefaultMutableTreeNode("网络服务部");
    DefaultMutableTreeNode nodeDB = new DefaultMutableTreeNode("内勤开发部"); root.add(nodeA);
    root.add(nodeB);
    root.add(nodeC);
    root.add(nodeD);
    root.add(nodeE);
    nodeC.add(nodeCA);
    nodeC.add(nodeCB);
    nodeD.add(nodeDA);
    nodeD.add(nodeDB); final DefaultTreeModel treeModel = new DefaultTreeModel(root);
    final JTree tree = new JTree(treeModel); Container container = getContentPane();
    container.add(tree, BorderLayout.CENTER); tree.addTreeWillExpandListener(new TreeWillExpandListener() { @Override
    public void treeWillCollapse(TreeExpansionEvent event)
    throws ExpandVetoException {
    // TODO Auto-generated method stub
    TreePath path = event.getPath();
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
    .getLastPathComponent();
    System.out.println("节点“" + node.getUserObject() + "”将被折叠!");
    } @Override
    public void treeWillExpand(TreeExpansionEvent event)
    throws ExpandVetoException {
    // TODO Auto-generated method stub
    TreePath path = event.getPath();
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
    .getLastPathComponent(); System.out.println("节点“" + node.getUserObject() + "”将被展开!");
    } }); tree.addTreeExpansionListener(new TreeExpansionListener() { @Override
    public void treeCollapsed(TreeExpansionEvent event) {
    // TODO Auto-generated method stub
    TreePath path = event.getPath();
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
    .getLastPathComponent();
    System.out.println("节点“" + node.getUserObject() + "”已经被折叠!");
    System.out.println();
    } @Override
    public void treeExpanded(TreeExpansionEvent event) {
    // TODO Auto-generated method stub
    TreePath path = event.getPath();
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) path
    .getLastPathComponent();
    if ((node.getUserObject()).equals("技术部")) {
    System.out.println("您没有权限查看该节点包含的子节点");
    tree.collapsePath(path); // 内部类中引用的变量必须为final
    } else {
    System.out.println("节点“" + node.getUserObject() + "”已经被展开!");
    System.out.println();
    } } });
    } /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    JTree_6 instance = new JTree_6();
    instance.setTitle("处理展开节点事件");
    instance.setVisible(true);
    instance.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    instance.pack();
    }}
      

  3.   


    谢谢,你的这些实例很不错,但我想要的是那种就是如图:
    在点击左侧不同节点如TP类时,右边显示TP类是巴拉巴拉、
    点击TN类可以是另一类的叙述文字。
    叙述文字可以自己输入的那种。谢谢你的回复..辛苦了
      

  4.   


    谢谢,你的这些实例很不错,但我想要的是那种就是如图:
    在点击左侧不同节点如TP类时,右边显示TP类是巴拉巴拉、
    点击TN类可以是另一类的叙述文字。
    叙述文字可以自己输入的那种。谢谢你的回复..辛苦了
    那个更简单啊,直接把第一个例子的输出改成:TreeItem.getText()
      

  5.   

    http://blog.csdn.net/evangelionxb/article/details/10286497代码自己看吧。
      

  6.   

    没有看楼主的代码,也没具体试过,仅提供一个我的思路:
    1.给左边的节点添加一个监听器,这个监听器就是右边的文本区,如:
       node.addListener(textfield);
       addListener方法的作用就是将textfield赋给node的一个成员变量,比如叫listener
    2.那么,当node被点击之后,调用node的成员listener的方法,比如叫onEvent:
       listener.onEvent(text);//参数text可以表示被点击的这个node上面的信息。
       onEvent方法会将text的值替换到右边的文本区。不知道是不是楼主想要的
      

  7.   


    试了试您的, 
    我的叶节点node1,声明JTEXTAREA ta1那么代码就是:
     node1.addListener(ta1);
            ta1.onEvent(想输的内容);
    是这样么,这样显示的是没有为类型 DefaultMutableTreeNode 定义方法 addListener(JTextArea)
    没有为类型 JTextArea 定义方法 onEvent(int)不知什么意思
      

  8.   

    可以使用,很厉害,谢谢你,我想再看看我的代码怎么修改,如果没有更好方案我会采纳你的。谢谢。请问CSDN论坛怎么采纳答案.把积分给你
      

  9.   

    可以使用,很厉害,谢谢你,我想再看看我的代码怎么修改,如果没有更好方案我会采纳你的。谢谢。请问CSDN论坛怎么采纳答案.把积分给你回复按钮旁边有结贴。