如何在 Java 中禁用 JTree 的叶节点?


JTree 是一种组件,它以分层方式显示数据。用户可以展开折叠各个子树。TreeNode 接口定义了必须由JTree 对象的节点实现的方法。DefaulMutableTreeNode 类提供了一个TreeNode 接口的默认实现。我们可以通过覆盖DefaultTreeCellRenderer 类的getTreeCellRendererComponent() 方法来禁用 JTree 的叶节点。

语法

public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)

示例

import java.awt.*;
import javax.swing.tree.*;
import javax.swing.*;
public class JTreeLeafNodeDisableTest extends JFrame {
   private TreeNode treeNode;
   private JTree tree;
   public JTreeLeafNodeDisableTest() {
      setTitle("JTreeLeafNodeDisable Test");
      treeNode = new DefaultMutableTreeNode("Country");
      tree = new JTree();
      tree.setModel(new DefaultTreeModel(treeNode));
      tree.setCellRenderer(new CustomDefaultTreeCellRenderer());
      add(tree);
      setSize(400, 300);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setLocationRelativeTo(null);
      setVisible(true);
   }
   public static void main(String[] args) {
      new JTreeLeafNodeDisableTest();
   }
   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;
         sel = enabled;
         hasFocus = enabled;
         Component treeCellRendererComponent = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
         treeCellRendererComponent.setEnabled(enabled);
         return treeCellRendererComponent;
      }
   }
}

输出

更新于:2020 年 7 月 3 日

291 次浏览

开启您的 职业

完成课程即可获得认证

开始
广告
© . All rights reserved.