从给定的子节点获取其父节点

3
 public class TabularMibTreeModel extends DefaultTreeModel {
     public TabularMibTreeModel() {
         super(new DefaultMutableTreeNode("Tablular MIBs"));
         loadParentMibs();
     }

     @Override
     public void reload() {
         super.reload();
     }

     private void loadParentMibs() {
           try {
                 ResultSet rs=Application.getDBHandler().executeQuery(SQLQueries.SELECT_TABULARMIBS_PARENT);

               while(rs.next()){            
                    String entryOID = rs.getString("mt_oid");       
                    DefaultMutableTreeNode node=new DefaultMutableTreeNode(new MibNode(entryOID, "Parent"));
                    node.add(new DefaultMutableTreeNode(Boolean.TRUE));

                    ((DefaultMutableTreeNode) getRoot()).insert(node,((DefaultMutableTreeNode)getRoot()).getChildCount())

                     node=null;

                 }

          } catch (SQLException e) {
           e.printStackTrace();
         }
     }

 }

我刚开始学习JTree。我已经创建了一个以entryOID为父级的jtree。实际上,在后端,entryOID有其父级。我能否获取这个父级,并如何通过避免使用entryOID显示它?请帮忙。


3
为了更快地获得更好的帮助,请发布一个SSCCE。需要硬编码数据来替换SQL,或者使用已经包含数据的默认树。 - Andrew Thompson
3
没有直接的方法可以不创建自定义的XxxTreeNode并进行迭代。1.不要在XxxModel中实现JDBC,2.必须在finally块中关闭Resultset,否则这些对象会留在JVM内存中。3.正如@Andrew Thompson所提到的那样,可能还有另一种方法,请发布一个SSCCE。4.node=null是逆向作用的,因为新的循环将创建适当的本地对象。 - mKorbel
1个回答

1
 private void loadParentMibs throws SQLException () {

   ResultSet resultSet = Application.getDBHandler()
     .executeQuery(SQLQueries.SELECT_TABULARMIBS_PARENT);

   DefaultMutableTreeNode root = (DefaultMutableTreeNode)getRoot();

   Map<String, DefaultMutableTreeNode> parentsMap
     = new HashMap<String, DefaultMutableTreeNode>();

   while( resultSet.next() ) {  
     String parentId = resultSet.getString("mt_oid");

     DefaultMutableTreeNode parent = parentsMap.get(parentId);
     if ( parent == null ) {
       parent = new DefaultMutableTreeNode( parentId );
       parentsMap.add( parentId, parent );
       root.add( parent );
     }

       // Are you sure, you want Boolean.TRUE leafs 
       //   in number of parent coincindence?
       // May be you want leafs to contains some 
       //   additional info from resultSet entity?
     DefaultMutableTreeNode leaf = new DefaultMutableTreeNode(Boolean.TRUE);
     parent.add(leaf);
   }

 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接