[英]How I Show Windows Registry in jTree?
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 意味着我顯示了 regkey 刪除之前和刪除之后的結構。
我有類似的問題,並且無法找到現成的東西。 經過一番閱讀,我編寫了一個實現 class 的 TreeModel 來執行此操作。
Class 可用於將任何 TreePath 列表轉換為樹,例如:
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;
}
}
它容易受到重復條目的影響,例如:
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
也許我稍后會修復它,或者也許有人知道如何做到這一點? 使用示例:
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中顯示注冊表,您需要提供TreeModel 。
我將從Oracle 的理解 TreeModel中的FileSystemModel開始,並將文件調用替換為對您正在使用的注冊表庫的調用。
win32 注冊表可能非常大,因此您可能需要添加TreeExpansionListener來釋放已關閉的分支。 這是關於樹擴展偵聽器的 Oracle 文章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.