[英]How to disable a leaf of the JTree
我有一個顯示文件和文件夾的JTree,我希望能夠訪問節點以啟用或禁用它們。 例如,如果按下按鈕,或者當文本等於特定文本時,則將其設置為禁用。
這是我的主要課程:
public FileViewer(){
frame = new JFrame("File Viewer");
panel = new JPanel(new BorderLayout());
root = new File("D:\\Documents\\A X");
FileSystemModel model = new FileSystemModel(root);
tree = new JTree();
tree.setModel(model);
panel.add(tree, BorderLayout.CENTER);
traverse(tree, "DS.png");
frame.add(panel);
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
// TODO code application logic here
new FileViewer();
}
我可以創建一個遍歷方法來檢查模型的每個子項並找到一個特定的子項:
public void traverse(JTree tree, String word) {
TreeModel model = tree.getModel();
if (model != null) {
Object root = model.getRoot();
//System.out.println("THIS IS ROOOT >>>>>> " + root.toString());
walk(model, root, word);
}
else
System.out.println("Tree is empty.");
}
protected void walk(TreeModel model, Object o, String word){
int cc;
cc = model.getChildCount(o);
for( int i=0; i < cc; i++) {
Object child = model.getChild(o, i);
if (model.isLeaf(child) && child.toString().equals(word)){
System.out.println(child.toString());
}
else {
//System.out.println("--" + child.toString());
walk(model,child, word);
}
}
}
JTree的方法是setEnabled(Boolean)
,但它的節點沒有。 有沒有想法如何禁用節點? 這是我的FileSystemModel文件,如果你想知道它。
您應該創建自定義DefaultTreeCellRenderer
類並使用它setEnabled
方法。
package com.company;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import java.awt.*;
public class Main {
public static void main(String[] args) {
TreeNode treeNode = new DefaultMutableTreeNode("Test");
JTree tree = new JTree();
tree.setModel(new DefaultTreeModel(treeNode));
tree.setCellRenderer(new CustomDefaultTreeCellRenderer());
JFrame frame = new JFrame();
frame.setContentPane(tree);
frame.setSize(320, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
static class CustomDefaultTreeCellRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
boolean enabled = false; // <-- here is your logic for enable/disable cell
sel = enabled;
hasFocus = enabled;
Component treeCellRendererComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
treeCellRendererComponent.setEnabled(enabled);
return treeCellRendererComponent;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.