免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4038 | 回复: 17
打印 上一主题 下一主题

!!请问JTree的子结点图标可以设成两种不同的图像吗?!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-01 11:04 |只看该作者 |倒序浏览
我搞了一个JTree,子结点是人名,我想在子结点男性同女性的图标不一样,请问可以实现吗?
DefaultTreeCellRenderer render=new DefaultTreeCellRenderer();
render.setLeafIcon(new ImageIcon("QQ.jpg");      
jtree.setCellRenderer(render);
我想实现为(但这样是不行的)
if(sex.equals("男")
   render.setLeafIcon(new ImageIcon("QQ_male.jpg");
else
   render.setLeafIcon(new ImageIcon("QQ_female.jpg");
jtree.setCellRenderer(render);
请问有其它方法实现吗?请大家帮帮忙。多谢先!!

论坛徽章:
0
2 [报告]
发表于 2005-08-01 22:25 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

请那位高手帮忙一下好吗?多谢先了

论坛徽章:
0
3 [报告]
发表于 2005-08-02 02:38 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

可以,扩展DefaultTreeCellRenderer重写方法getComponent....方法就可以了.

论坛徽章:
0
4 [报告]
发表于 2005-08-02 07:18 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

应该自己创建一个TreeCellRender,然后重载getTreeCellRendererComponent()方法,在不同的情况下设置不同的leaf icon,然后返回这个TreeCellRender。


  1. import java.awt.Component;
  2. import java.util.Calendar;

  3. import javax.swing.Icon;
  4. import javax.swing.ImageIcon;
  5. import javax.swing.JFrame;
  6. import javax.swing.JTree;
  7. import javax.swing.tree.DefaultTreeCellRenderer;

  8. public class LeafIconTest {
  9.         private JFrame jf = null;

  10.         /**
  11.          * @param args
  12.          */
  13.         public static void main(String[] args) {
  14.                 LeafIconTest lit = new LeafIconTest();
  15.                 lit.test();
  16.         }

  17.         private void test() {
  18.                 jf.show();
  19.         }

  20.         public LeafIconTest() {
  21.                 super();
  22.                 jf = new JFrame("Leaf Icon Test");
  23.                 jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  24.                 jf.setSize(200, 300);
  25.                 jf.getContentPane().add(getJTree());
  26.         }

  27.         private Component getJTree() {
  28.                 JTree jt = new JTree();
  29.                 jt.setCellRenderer(new DefaultTreeCellRenderer() {
  30.                         public Component getTreeCellRendererComponent(JTree tree,
  31.                                         Object value, boolean sel, boolean expanded, boolean leaf,
  32.                                         int row, boolean hasFocus) {
  33.                                 System.out.println("[DEBUG] "
  34.                                                 + Calendar.getInstance().getTime().toGMTString()
  35.                                                 + "  getLeafIcon invoked");
  36.                                 super.getTreeCellRendererComponent(tree, value, sel, expanded,
  37.                                                 leaf, row, hasFocus);
  38.                                 if (leaf) {
  39.                                         setIcon(getLengthIcon(value));
  40.                                 }
  41.                                 return this;
  42.                         }
  43.                 });
  44.                 return jt;
  45.         }

  46.         protected Icon getLengthIcon(Object value) {
  47.                 ImageIcon ii;
  48.                 // We use the length of the string representation of the node to
  49.                 // determine the icon.
  50.                 // In real world, we need to determine this by the
  51.                 // 'male | female' attribute of the tree node, which can be extracted
  52.                 // from the parameter 'value'
  53.                 int length = value.toString().length();
  54.                 if (length == 5 || length == 3) {
  55.                         ii = new ImageIcon("e:/temp/male.jpg");
  56.                 } else {
  57.                         ii = new ImageIcon("e:/temp/female.jpg");
  58.                 }
  59.                 System.out.println(value.toString());
  60.                 return ii;
  61.         }
  62. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-08-02 09:59 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

多谢!!

论坛徽章:
0
6 [报告]
发表于 2005-08-02 13:10 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

此功能我通过改编后,把它移植到我的程序中,可以到是可以的,但我的程序的性别判断是通过数据库连接来获取的,所以让程序执行变得很慢,在此界面上的其它的一个动画线程受到了很大影响。

论坛徽章:
0
7 [报告]
发表于 2005-08-02 16:21 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

你的数据库的信息是随时变化的么?
可以考虑作个cache

论坛徽章:
0
8 [报告]
发表于 2005-08-02 16:30 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

请教一下这位高手,请问怎么作cache.能给一点示例吗?多谢先

论坛徽章:
0
9 [报告]
发表于 2005-08-02 16:54 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

你的节点的内容随时变化么?还是从数据库取一次就可以了?
你可以把性别信息保存在TableModel里啊?
就不用每次都访问数据库了。

论坛徽章:
0
10 [报告]
发表于 2005-08-02 17:01 |只看该作者

!!请问JTree的子结点图标可以设成两种不同的图像吗?!!

我的子结点的名字都是从数据库中获取的,只用一次访问就从数据库中读出子结点名,但当每次单击子结点时都会连接数据库获取子结点的详细信息显示的一个文本框中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP