在SWING中,我在JTREE中的每个节点对应了一个JTABLE,并且这些节点是动态生成的,同时可以修改JTABLE中对应的值。用什么方法将JTABLE里面的值保存在内存中并对应到JTREE中的节点。就是说我切换某个节点的时候,JTABLE就显示该节点的相关信息。分不多,谢谢各位帮忙了……

解决方案 »

  1.   

    假设你的树的事件是以下
    a.AddListener(new Handler() {
      public void hand(Event event) {
        这里, 你可以从event中得到你的事件源, 你的需求中, 也就是可以得到被点击的节点的id(或者其他什么标识)
        剩下的相信你可以处理了, 调用你的JTable构造器根据节点id获取数据, 构造一个JTable, 放到该显示的位置.
        如果考虑性能, 不妨对你的JTable做一个适当粒度的缓存
      }
    })
      

  2.   

    给你一段我写的代码,前几天写过一样的东西,鼠标点击树节点,自动到树据库里找节点对应的JTextPane内容,抛砖引玉吧。
    public void mousePressed(MouseEvent e) {
    if (jtree.getSelectionPath()==null) return;
    selectedPath=jtree.getSelectionPath().toString();
    TreePath path = jtree.getPathForLocation(e.getX(), e.getY());           System.out.println("choosed path"+path);
    if (path == null) {
    return;
    }
    jtree.setSelectionPath(path);
    String Stringpath=path.toString();
    String sql = "select content from Notes where nodeName='" + Stringpath + "'";
    try {
    Statement stmt= DB.con.createStatement();
    ResultSet rs=stmt.executeQuery(sql);
    while(rs.next()){
    InputStream in = rs.getBinaryStream("content");
    ObjectInputStream obis = new ObjectInputStream(in);
    oFrame.textPanel.setDocument((StyledDocument)obis.readObject());
    }
    // obis.close();
    rs.close();
    stmt.close();
    } catch (SQLException e1) {
    // TODO 自动生成 catch 块
    e1.printStackTrace();
    } catch (Exception e1) {
    // TODO 自动生成 catch 块
    e1.printStackTrace();
    }
      

  3.   

    补充一下,你的类要实现implements MouseListener另外  
    jtree = new JTree(root);
    ...jtree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); //设置Tree一次只能选择一个节点
    jtree.addMouseListener(this);