如何在 jTree 中显示 Windows 注册表? [英] How I Show Windows Registry in jTree?

查看:44
本文介绍了如何在 jTree 中显示 Windows 注册表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 java swing.我想在 jTree 中显示 Windows 注册表是如何可能的.我是 Java 新手,请给我一个解决方案.实际上我想删除一个特定的 Windows 注册表项,我已经完成了,但我不能在jtree中显示意味着我在regkey删除之前和删除之后显示结构.

I am using java swing.I want to show windows registry in jTree how it is possible.I am new in java please give me a solution.Actually i want to delete a particular windows registry key i done it but i can not show it in jtree means i show the structure before regkey deletion and after deletion.

推荐答案

我遇到了类似的问题,无法找到现成的东西.经过一些阅读,我编写了一个 TreeModel 实现类来执行此操作.
类可用于将任何 TreePath 列表转换为树,例如:

I had similar problem, and wasn't able to find something ready-to-use. After some reading I wrote a TreeModel implementing class to do this.
Class can be used to convert any TreePath list into tree, eg:

A->B->C->D
A->B->E->F
A->G->H->J

将变成:

A+
 |B+
 | |C+
 | | |D
 | |E+
 |   |F
 |G+
   |H+
     |J

这是:

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.NoSuchElementException;
    import javax.swing.event.TreeModelListener;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.TreeModel;
    import javax.swing.tree.TreePath;

    /**
     *
     * @author Majkel
     */
    public class TreePathsTreeModel implements TreeModel {
      private final ArrayList<TreePath> paths;
      private final String root;

      public TreePathsTreeModel(String root, TreePath[] paths) {
        this.root = root;
        this.paths = new ArrayList<TreePath> (Arrays.asList(paths));
      }


      @Override
      public Object getRoot() {
        return this.root;
      }

      @Override
      public Object getChild(Object parent, int index) {
        try {
          return getChildren(parent).get(index);
        } catch (IndexOutOfBoundsException ex) {
          return null;
        }
      }

      @Override
      public int getChildCount(Object parent) {
        return getChildren(parent).size();
      }

      @Override
      public boolean isLeaf(Object node) {
        for (int i = 0; i < paths.size(); i++) {
          TreePath treePath = paths.get(i);
          if (treePath.getLastPathComponent().equals(node))
            return true;
        }
        return false;
      }

      // This method is only required for editable trees, so it is not
      // implemented here.
      @Override
      public void valueForPathChanged(TreePath path, Object newValue) {
        //throw new UnsupportedOperationException("Not supported yet.");
      }

      @Override
      public int getIndexOfChild(Object parent, Object child) {
        return getChildren(parent).indexOf(child);
      }

      // This TreeModel never fires any events (since it is not editable)
      // so event listener registration methods are left unimplemented
      @Override
      public void addTreeModelListener(TreeModelListener l) {
        //throw new UnsupportedOperationException("Not supported yet.");
      }

      @Override
      public void removeTreeModelListener(TreeModelListener l) {
        //throw new UnsupportedOperationException("Not supported yet.");
      }
              //search all paths in list for given object 
              //return every item one level further than it
      private ArrayList<String> getChildren(Object parent) {
        ArrayList<String> children = new ArrayList<String>();
        for (int i = 0; i < this.paths.size(); i++) {
          ArrayList<Object> pathObjects = new ArrayList<Object>( Arrays.asList(this.paths.get(i).getPath()) );
          for (Iterator<Object> it = pathObjects.iterator(); it.hasNext();) {
            Object parentCandidate = it.next();
            if (parentCandidate.equals(parent)) {
              Iterator<Object> checker = it;
              try {
                String child = new DefaultMutableTreeNode( checker.next() ).toString();
                if ( !children.contains(child) )
                  children.add (child);
              } catch (NoSuchElementException ex) {

              } 
            }
          }
        }
        return children;
      }

    }

容易出现重复条目​​,例如:

It is vulnerable to duplicate entries, eg:

A->B->C->D
A->C->E->F
A->G->H->J

将变成:

 A+
  |B+
  | |C+
  |   |D
  |   |E+
  |     |F
  |C+
  | |D
  | |E+
  |   |F
  |G+
    |H+
      |J

也许我稍后会修复它,或者也许有人知道该怎么做?使用示例:

Maybe I'll fix it later, or maybe someone has an idea how to do it? An example use:

TreePath tpOne = new TreePath(new String [] {"A", "B", "C", "D"});
TreePath tpTwo = new TreePath(new String [] {"A", "B", "E", "F"});
TreePath tpThree = new TreePath(new String [] {"A", "G", "H", "J"});

TreeModel model = new TreePathsTreeModel("A", TreePath[]{tpOne, tpTwo, tpThree}  );
JTree tree = new JTree(model);

这篇关于如何在 jTree 中显示 Windows 注册表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆