[size=medium]今天工作中,遇到小问题:想把复选框按钮作为JTree的节点装饰器,没想到,为复选框设置了 icon 后,小方框居然不见了!查看了API,没找到什么好办法,那么,自己动手解决吧:
思路:
用 JPanel 作为节点绘制器,把绘制器上的细节都“装裱”在面板。
先来看效果图
[img]http://hiphotos.baidu.com/hardneedl/pic/item/edee0b3890776120b9998f57.jpg[/img]
那么接下来读读“绘制装饰器”代码吧:
TreeItem 是自定义对象[/size]
[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
思路:
用 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