JTree 的装饰器演示

[size=medium]今天工作中,遇到小问题:想把复选框按钮作为JTree的节点装饰器,没想到,为复选框设置了 icon 后,小方框居然不见了!查看了API,没找到什么好办法,那么,自己动手解决吧:
思路:
用 JPanel 作为节点绘制器,把绘制器上的细节都“装裱”在面板。
先来看效果图
[img]http://hiphotos.baidu.com/hardneedl/pic/item/edee0b3890776120b9998f57.jpg[/img]
那么接下来读读“绘制装饰器”代码吧:
TreeItem 是自定义对象[/size]
final public class MyTreeCellRenderer implements TreeCellRenderer {
private static final Icon LEFT_ICON = new ImageIcon("left.png");
private static final Icon NODE_ICON = new ImageIcon("node.png");
private static final int WIDTH = 10;

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

if (!(value instanceof DefaultMutableTreeNode)) return new JLabel("???");
Object obj = ((DefaultMutableTreeNode)value).getUserObject();
if (!(obj instanceof TreeItem)) return new JLabel("xxx");

TreeItem item = (TreeItem)obj;
final JPanel panel = new JPanel(new FlowLayout(0,0,0));
final Dimension dimension = panel.getSize();
dimension.width = WIDTH;
panel.setSize(dimension);
panel.setToolTipText(item.getDesc());

final JCheckBox checkBox = new JCheckBox(item.toString(), selected);

final JLabel iconLabel = new JLabel(leaf? LEFT_ICON : NODE_ICON);

panel.add(iconLabel);
panel.add(checkBox);
return panel;
}
}


[size=medium]请注意粗体蓝色代码:要想把工具提示效果显露出来,需要 tree.setToolTipText("@$%");

tree 是JTree 的一个实例,之所以 把提示文本“乱写”,那是因为:如果不在JTree上显示调用 setToolTipText ,那么工具提示文本就不会正常显露,这也许是JDK的一个小缺陷。我用的JDK版本是:[/size]java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)


原文出处:http://hi.baidu.com/hardneedl/blog/item/e6d5a4443214754d500ffeb1.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值