如何为 JTree 中的特定节点调用 DefaultTreeCellRenderer
How to call DefaultTreeCellRenderer for specific nodes in the JTree
我有一个自定义的 DefaultTreeCellRenderer
可以禁用 JTree 中的节点。
这是它的代码:
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 = true; // <-- here is the logic for enable/disable cell
Component treeCellRendererComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
treeCellRendererComponent.setEnabled(enabled);
return treeCellRendererComponent;
}
}
但是我无法在我的代码中使用它。我不能在任何需要的地方调用它的方法或东西。例如,当按下按钮时,或者当项目具有特定名称时。
这是一个示例,我的方法遍历模型并找到与给定字符串匹配的节点。
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);
// HERE I NEED TO MAKE "child" DISABLED
}
else {
walk(model,child, word);
}
}
}
这就是我将 CustomDefaultTreeCellRenderer
设置到我的树的方式:
tree.setCellRenderer(new CustomDefaultTreeCellRenderer());
这是我的步行方法的一个例子:
walk(tree.getModel(), tree.getModel().getRoot(), "DS.png");
知道如何禁用特定节点吗?
Swing 框架控制何时为节点调用 TreeCellRenderer;你无法控制这个。您需要在 CustomDefaultTreeCellRenderer 中检查您需要的条件(例如,节点的名称)。如果不需要禁用节点,只需不要调用 setEnabled()。
我有一个自定义的 DefaultTreeCellRenderer
可以禁用 JTree 中的节点。
这是它的代码:
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 = true; // <-- here is the logic for enable/disable cell
Component treeCellRendererComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
treeCellRendererComponent.setEnabled(enabled);
return treeCellRendererComponent;
}
}
但是我无法在我的代码中使用它。我不能在任何需要的地方调用它的方法或东西。例如,当按下按钮时,或者当项目具有特定名称时。
这是一个示例,我的方法遍历模型并找到与给定字符串匹配的节点。
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);
// HERE I NEED TO MAKE "child" DISABLED
}
else {
walk(model,child, word);
}
}
}
这就是我将 CustomDefaultTreeCellRenderer
设置到我的树的方式:
tree.setCellRenderer(new CustomDefaultTreeCellRenderer());
这是我的步行方法的一个例子:
walk(tree.getModel(), tree.getModel().getRoot(), "DS.png");
知道如何禁用特定节点吗?
Swing 框架控制何时为节点调用 TreeCellRenderer;你无法控制这个。您需要在 CustomDefaultTreeCellRenderer 中检查您需要的条件(例如,节点的名称)。如果不需要禁用节点,只需不要调用 setEnabled()。