jtree根据不同类型节点定制图标

本文介绍如何自定义Java Swing中的树节点类AlarmDefaultMutableTreeNode及其渲染器AlarmDefaultTreeCellRenderer,通过设置不同类型的图标来区分树结构中的省份、区域及设施等层级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

=====1自定义 AlarmDefaultMutableTreeNode extends DefaultMutableTreeNode=====

import java.io.Serializable;

import javax.swing.tree.DefaultMutableTreeNode;

public class AlarmDefaultMutableTreeNode extends DefaultMutableTreeNode implements Serializable {
 private static final long serialVersionUID = 1L;

 private int nodeType;
 
 public AlarmDefaultMutableTreeNode() {
  super();
  // TODO Auto-generated constructor stub
 }

 public AlarmDefaultMutableTreeNode(Object arg0, boolean arg1) {
  super(arg0, arg1);
  // TODO Auto-generated constructor stub
 }

 public AlarmDefaultMutableTreeNode(Object arg0) {
  super(arg0);
  // TODO Auto-generated constructor stub
 }

 public void setTreeNodeType(int type) {
  this.nodeType = type;
 }
 
 public int getTreeNodeType() {
  return this.nodeType;
 }
}

=====2自定义 AlarmDefaultTreeCellRenderer extends DefaultTreeCellRenderer =========

import java.awt.Component;

import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;

/**
 * @author hcc
 *
 */
public class AlarmDefaultTreeCellRenderer extends DefaultTreeCellRenderer {
 private static final long serialVersionUID = 1L;

 public AlarmDefaultTreeCellRenderer() {
  super();
 }

 @Override
 public Component getTreeCellRendererComponent(JTree tree, Object value,
   boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
  // TODO Auto-generated method stub
  super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
  
  AlarmDefaultMutableTreeNode treeNode = (AlarmDefaultMutableTreeNode)value;
  
  int type = treeNode.getTreeNodeType();
  switch (type) {
   case 1:
    this.setIcon(new ImageIcon(getClass().getResource("/images/072.gif"))); 
    break;
   case 2:
    this.setIcon(new ImageIcon(getClass().getResource("/images/zoomup.gif"))); 
    break;
   case 3:
    this.setIcon(new ImageIcon(getClass().getResource("/images/trend.gif"))); 
    break;
   default:
    break;
  }
  
  return this;
 }
}

=====3 应用 ========

EpProvince province = initFacilities();
  AlarmDefaultMutableTreeNode top = new AlarmDefaultMutableTreeNode(
    province.getProvinceName());
  AlarmDefaultMutableTreeNode zoneNode = null;
  AlarmDefaultMutableTreeNode indNode = null;
  AlarmDefaultMutableTreeNode facNode = null;

  Set<EpZone> zones = province.getEpZones();
  for (EpZone zone : zones) {
   zoneNode = new AlarmDefaultMutableTreeNode(zone.getZoneName());
   zoneNode.setTreeNodeType(1);
   top.add(zoneNode);

   Set<EpIndustry> industrys = zone.getEpIndustries();
   for (EpIndustry industry : industrys) {
    indNode = new AlarmDefaultMutableTreeNode(industry.getIndustryName());
    indNode.setTreeNodeType(2);
    zoneNode.add(indNode);

    Set<EpFacilities> facilities = industry.getEpFacilitieses();
    for (EpFacilities fac : facilities) {
     facNode = new AlarmDefaultMutableTreeNode(fac
       .getFacilitiesName());
     facNode.setTreeNodeType(3);
     indNode.add(facNode);
    }
   }
  }

  jTree = new JTree(top) {
   public Insets getInsets() {
    return new Insets(5, 5, 5, 5);
   }
  };

  jTree.addTreeSelectionListener(new TreeSelectionListener() {
   public void valueChanged(TreeSelectionEvent e) {
       TreePath newLeadPath = e.getNewLeadSelectionPath();
   }
  });

  jTree.setCellRenderer(new AlarmDefaultTreeCellRenderer());    

  jTree.setEditable(false);
  jScrollPane1.setViewportView(jTree);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值