我正在使用java swing.I想在jTree中顯示windows註冊表它是如何可能的。我是新的java請給我一個解決方案。其實我想刪除特定的Windows註冊表項我做到了,但我無法顯示它在jtree意味着我顯示regkey刪除和刪除後的結構。我如何在jTree中顯示Windows註冊表?
回答
看看「read/write to Windows Registry using Java」
更新: 要顯示一個JTree註冊表中,您將需要提供一個TreeModel。
我會從Oracle's Understanding the TreeModel的FileSystemModel開始,並將調用的文件調用替換爲您正在使用的註冊表庫中。
win32註冊表可能很大,所以您可能需要添加一個TreeExpansionListener來發布已關閉的分支。這是一個Oracle article on tree expansion listeners。
我知道這篇文章,並閱讀此代碼,我可以通過閱讀和寫這個我也可以刪除註冊表,但通過這個程序,我不能顯示這是jTree.Actually我的問題是如何顯示jTree中的Windows註冊表。 .......請回復。 – 2011-04-29 12:04:08
哈哈...良好的僞裝@Lieven as @abc,非常有說服力:-) – kleopatra 2011-05-02 07:59:34
@kleopatra - 花了我一些時間自己弄清楚*我剛發佈評論* @abc試圖通過編輯添加到答案回答。 *(提醒自己,不要那樣做)* – 2011-05-02 08:03:45
我有類似的問題,並沒有找到可以隨時使用的東西。讀完一段後,我寫了一個TreeModel實現類來完成這個任務。
類可用於任何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);
- 1. Windows註冊表
- 2. 如何在JTextArea中顯示JTree文件
- 3. 如何在JTree中顯示多列
- 4. 如何在覆蓋FOSUserBundle註冊表單中顯示錯誤?
- 5. 如何在文本框中顯示註冊表項C#
- 6. 如何使Outlook加載項顯示在註冊表中
- 7. 在註冊表格頂部顯示註冊頁面的結果
- 8. Windows ce註冊表
- 9. 如何通過C#中的代碼編輯Windows註冊表值(註冊表)?
- 10. 如何僅顯示JTree中的目錄?
- 11. JTree不顯示
- 12. 在Python中編輯Windows 7註冊表?
- 13. 在Windows 7中創建註冊表項
- 14. 在Windows註冊表項頂部添加註冊表項#
- 15. 從Windows註冊表中刪除InProgress註冊表項
- 16. 如何在Windows CE中讀寫註冊表中的值?
- 17. 如何在點擊註冊時在當前頁面上顯示註冊框?
- 18. 如何顯示在我的Facebook Connect網站上註冊的Facebook用戶列表
- 19. Docker顯示當前註冊表
- 20. C++ Windows註冊表編輯
- 21. 訪問Windows註冊表Python
- 22. C++搜索Windows註冊表
- 23. 訪問Windows註冊表
- 24. Windows註冊表RunOnce循環
- 25. 編輯windows註冊表
- 26. 如何在windows mobile中註冊WM_DEVICECHANGE消息的表格
- 27. 如何在Windows註冊表中設置一個值? (C++)
- 28. 如何將我的應用程序登錄到Windows註冊表?
- 29. 鑑於Windows註冊表項,我如何找到它的作用?
- 30. 如何在drupal 7中註冊註冊表單?
@abs - 您應該爲答案添加註釋,而不是編輯您的問題。由於您是新用戶,我已經爲您添加了評論。 – 2011-04-29 12:03:54
重複帳戶? – kleopatra 2011-05-02 08:03:33