当前位置:  技术问答>java相关

如何为JTree设置不同的节点图标?

    来源: 互联网  发布时间:2015-04-18

    本文导语:  通过DefaultTreeCellRenderer可以设置枝或叶两种图标,但是我现在是想要为不同的枝设置不同的图标,比如 Server - Database - Table 三级,我希望是不同的图标,这样如何实现? | 将JLabel当作节点或树叶加...


通过DefaultTreeCellRenderer可以设置枝或叶两种图标,但是我现在是想要为不同的枝设置不同的图标,比如 Server - Database - Table 三级,我希望是不同的图标,这样如何实现?


|
将JLabel当作节点或树叶加入。。。。。。。。。

|
是的,扩展JLabel实现TreeCellRenderer,然后作为DefaultMutableTreeNode的参数就可以了。如果扩展别的组件就可以实现更复杂的功能,呵呵。

|
我的代码
package untitled5;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.tree.*;

public class Frame1 extends JFrame
{

  JPanel contentPane;
  ImageIcon imageicona = new ImageIcon("10-1.jpg");
  ImageIcon imageiconb = new ImageIcon("10-2.jpg");
  ImageIcon imageiconc = new ImageIcon("10-3.jpg");
  BorderLayout borderLayout1 = new BorderLayout();
  JPanel jPanel1 = new JPanel();
  JPanel jPanel2 = new JPanel();
  JScrollPane jScrollPane1 = new JScrollPane();
  BorderLayout borderLayout2 = new BorderLayout();

  JLabel jLabel1 = new JLabel("A",imageicona,JLabel.LEFT);
  JLabel jLabel2 = new JLabel("B",imageiconb,JLabel.LEFT);
  JLabel jLabel3 = new JLabel("C",imageiconc,JLabel.LEFT);
  //JLabel [][] j = {{jLabel1,jLabel2,jLabel3},{jLabel2}};
  JTree jTree1 = new JTree(getD());

  //Construct the frame
  public Frame1()
  {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception
  {
    //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
    contentPane = (JPanel) this.getContentPane();
    contentPane.setLayout(borderLayout1);
    this.setSize(new Dimension(400, 300));
    this.setTitle("Frame Title");
    jPanel2.setLayout(borderLayout2);
    /*
    jLabel1.setText("jLabel1");
    jLabel2.setText("jLabel2",imageiconb,JLabel.LEFT);
    jLabel3.setText("jLabel3",imageiconc,JLabel.LEFT);
    */
    contentPane.add(jPanel1, BorderLayout.NORTH);
    jPanel1.add(jLabel3, null);
    jPanel1.add(jLabel2, null);
    jPanel1.add(jLabel1, null);
    contentPane.add(jPanel2,  BorderLayout.CENTER);
    jPanel2.add(jScrollPane1,  BorderLayout.CENTER);
    jScrollPane1.getViewport().add(jTree1, null);

    MyDefaultTreeCellRenderer renderer = new MyDefaultTreeCellRenderer();
   // renderer.setLeafIcon(imageiconc);
    jTree1.setCellRenderer(renderer);

  }
  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e)
  {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING)
    {
      System.exit(0);
    }
  }

  private TreeModel getD()
  {
    DefaultMutableTreeNode root = new DefaultMutableTreeNode("A");
    DefaultMutableTreeNode p,q;
    p = new DefaultMutableTreeNode("B");
    q = new DefaultMutableTreeNode("C");
    q.add(new DefaultMutableTreeNode("D"));

    root.add(p);
    root.add(new DefaultMutableTreeNode("X"));
    p.add(q);

    return new DefaultTreeModel(root);

  }


}

package untitled5;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.awt.Component;
import javax.swing.tree.DefaultTreeModel;



public class MyDefaultTreeCellRenderer extends DefaultTreeCellRenderer
{

  public MyDefaultTreeCellRenderer()
  {
  }
  public static void main(String[] args)
  {
    MyDefaultTreeCellRenderer myDefaultTreeCellRenderer1 = new MyDefaultTreeCellRenderer();
  }

  public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus)
  {
     super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
     DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
    // node.setIcon(new ImageIcon("10-1.jpg"));
    /*
     String tmp = node.toString();
     System.out.println(row);
     if (tmp.equals("A"))
        this.setIcon(new ImageIcon("10-1.jpg"));
     else if (tmp.equals("B"))
        this.setIcon(new ImageIcon("10-2.jpg"));
     else if (tmp.equals("C"))
        this.setIcon(new ImageIcon("10-3.jpg"));
     else if (tmp.equals("D"))
        this.setIcon(new ImageIcon("10-1.jpg"));
        */
     switch(node.getLevel() )
     {
       case 0 : this.setIcon(new ImageIcon("10-1.jpg"));
           break;
       case 1 : this.setIcon(new ImageIcon("10-2.jpg"));
           break;
       case 2 : this.setIcon(new ImageIcon("10-3.jpg"));
           break;

     }
     return this;
  }

}

可以实现你的要求。。。不是到是不是最好的方法。。。
你的想法呢??

    
 
 

您可能感兴趣的文章:

  • 紧急求助:如何动态修改某个选中jTree节点的节点名称。
  • 急救,请问如何得到jTree中被选中节点的父节点的path或者row?
  • 请教Swing高手,如何在JTree中如何通过一个TreePath判断它代表的节点是不是叶节点?
  • 如何响应JTREE中的节点点击事件??
  • (高分) JTree 节点是如何判断双击的?
  • 想在JTree的一些节点左边加上复选框
  • HELP~~~~~~JTREE里面如何避免重复的节点出现
  • jtree如何知道选中节点的TEXT?
  • 请问如何将树(JTree)的节点设置成不同的图标?100分献上!
  • 当我做jtree的类,我要动态的根据需要来增加节点例如
  • 请问,如何实现并处理JTree节点Multi-Selected?
  • *****请教SWING高手,我想让JTree一开始的某个节点处于展开,用的是expandPath(TreePath p),请问如何构造TreePath参数,用字符串可以吗
  • 给分问题:如何展开JTree中的节点,内在细说……在线,解决即给分……
  • 当Jtree.setEditable(true)后修改了节点的title,按回车,这时候触发了什么事件
  • 当Jtree.setEditable(true)后修改了节点的title,按回车,做些判断后怎么让修改失效,改回原来的title(gularess(无吃哪拉)再帮帮忙)
  • 请教各位大侠如何在JTree树中得到各个节点显示出来的字串
  • 为什么JTree 初始时根节点是展开的?
  • 请问根据一个坐标点怎么判断对应的JTree的哪一个节点上
  • 如何利用JDOM,把JTree中所有节点写入到一个XML文件中?最好有现成的例子。谢谢了。
  • JTree是不是有问题?(在JTree中删除一个节点时)
  • 请教高手关于JTree图标的问题
  • 请问怎样设置JTree对象的图标
  • 如何用Jtree实现空结点与非空结点有相同的图标?
  • 怎样将JTree的handle图标改掉,以及出现如下横线的效果:
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • JTree中的Node如何设置字体前景色?
  • java命名空间javax.swing类jtree的类成员方法: jtree定义及介绍
  • 请问何用新的JTree刷新旧的jtree?
  • java命名空间javax.swing类jtree.accessiblejtree的类成员方法: jtree.accessiblejtree定义及介绍
  • 怎样使JTree对象可以自动有滚动条,
  • java命名空间javax.swing类jtree.treeselectionredirector的类成员方法: jtree.treeselectionredirector定义及介绍
  • JTREE
  • java命名空间javax.swing类jtree.accessiblejtree.accessiblejtreenode的类成员方法: jtree.accessiblejtree.accessiblejtreenode定义及介绍
  • jTree 刷新问题!
  • java命名空间javax.swing类jtree.treemodelhandler的类成员方法: jtree.treemodelhandler定义及介绍
  • 请详细介绍一下JTree的使用方法,88分奉送......................
  • java命名空间javax.swing类jtree.emptyselectionmodel的类成员方法: sharedinstance定义及介绍
  • JTree怎么用呀?
  • java命名空间javax.swing类jtree的类成员方法: selectionredirector定义及介绍
  • 怎样得到Jtree选中项(要String形式)?
  • java命名空间javax.swing类jtree.dynamicutiltreenode的类成员方法: haschildren定义及介绍
  • 程序运行时,出现一个完全展开的JTree?
  • java命名空间javax.swing类jtree的类成员方法: getaccessiblecontext定义及介绍
  • 请问:如何在java中的jtree控件中使用checkbox
  • java命名空间javax.swing类jtree的类成员方法: createtreemodellistener定义及介绍
  • 求助!!!JTree
  • java命名空间javax.swing类jtree的类成员方法: paramstring定义及介绍
  • 请问Swing中的JTree控件如何让监听一个子叶的鼠标事件?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3