У меня есть 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, если вы хотите узнать об этом.
Спасибо. он выполняет свою работу. Только на одном этом. Есть ли у вас мысли о том, как отключить внутренние файлы, если отключенный элемент является папкой? – Dan
Вы можете создать пользовательскую модель данных и пометить элементы файловой системы как включенные/отключенные внутри нее. Затем вы можете использовать эту информацию в 'getTreeCellRendererComponent' для включения/выключения элементов дерева. –
Спасибо за ответ еще раз. Я просто не понимаю, как 'enabled' может работать извне класса' CustomDefaultTreeCellRenderer'. Допустим, я выбрал узел с помощью метода 'walk', и я хочу отключить его. Я попытался сделать метод, но он не сработал. Можете ли вы привести мне пример для этого, пожалуйста? – Dan