今天工作中,遇到小问题:想把复选框按钮作为JTree的节点装饰器,没想到,为复选框设置了 icon 后,小方框居然不见了!查看了API,没找到什么好办法,那么,自己动手解决吧:
思路:
用 JPanel 作为节点绘制器,把绘制器上的细节都“装裱”在面板。
先来看效果图
那么接下来读读“绘制装饰器”代码吧:
TreeItem 是自定义对象
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;
}
}
请注意粗体蓝色代码:要想把工具提示效果显露出来,需要 tree.setToolTipText("@$%");
tree 是JTree 的一个实例,之所以 把提示文本“乱写”,那是因为:如果不在JTree上显示调用 setToolTipText ,那么工具提示文本就不会正常显露,这也许是JDK的一个小缺陷。我用的JDK版本是: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
分享到:
相关推荐
这个示例演示了如何使用`Hashtable`创建具有层次结构的`JTree`。通过这种方式,可以很容易地构建复杂的树形结构,并根据需要动态添加或修改节点。 #### 总结 通过上述示例,我们可以看到`JTree`的灵活性及其在构建...
4. **应用自定义的渲染器和编辑器:** 最后,将这些自定义组件应用到`JTree`实例上。 ```java JTree tree = new JTree(); tree.setCellRenderer(new CheckboxTreeCellRenderer()); tree.setCellEditor(new ...
实现jTable和jTree的双向联动,点击jTree会选中jTable单元格,点击jTable会选中jTree节点。
在`JTree`中实现拖放功能,我们需要利用Java Swing提供的`TransferHandler`类和一些相关的事件监听器。 1. **创建`JTree`实例**: 首先,你需要创建一个`DefaultMutableTreeNode`作为树的数据模型,并将其设置到`...
3. **监听器(Listener)**:`JTree` 支持多种类型的监听器,如 `TreeSelectionListener` 可以监听用户选择的改变,`TreeModelListener` 可以监听模型的变化,`TreeMouseListener` 和 `TreeKeyListener` 分别处理...
接下来,我们将通过两个具体的例子来演示如何使用`JTree`。 ##### 示例1:初始化一个简单的`JTree` 首先展示一个简单的示例代码,用于创建一个空的`JTree`并将其添加到`JFrame`中: ```java import javax.swing.*...
这些代码可能涵盖了更复杂的功能,比如自定义渲染器、拖放操作、数据绑定等,学习这些代码可以帮助开发者更好地理解和应用JTree和JTable在实际项目中的各种用法。 总之,JTree和JTable是Java GUI编程中不可或缺的...
在IT领域,尤其是在Web开发中,`JTree`是一个常用组件,它用于在用户界面中展示数据的层次结构,比如文件系统、组织架构等。在本案例中,我们讨论的是一个使用JavaScript实现的JTree,这通常是通过HTML、CSS和...
2. **设置默认渲染器**:默认情况下,`JTree`会使用`DefaultTreeCellRenderer`,但你可以自定义渲染器以满足特定需求。 3. **添加监听器**:注册监听器以便在节点被选择、展开或折叠时得到通知,从而执行相应的操作...
在压缩包文件"Jtree"中,可能包含了用于演示此功能的源代码。确保解压并检查这些文件,以获取更具体的实现细节。此外,你还可以根据需求调整代码,比如通过监听节点选择事件来改变图标,或者根据节点状态动态加载...
而`JSplitPane`是一个布局管理器,用于将两个组件(如`JTree`和`JTable`)放置在一个可调整大小的分隔面板中,用户可以根据需要调整两个部分的大小。 在Eclipse环境中,这是一个Maven项目,这意味着它依赖于Maven...
例如,在一个文件管理器应用中,它可以用来显示硬盘上的目录结构;在软件工程中,它可以展现项目的模块结构;在数据库应用中,它可以呈现表和字段的关系等。JTree的灵活性和可定制性使其成为Java开发中不可或缺的...
**JTree 2.0:构建直观的目录树视图** `JTree`是Java Swing库中的一个组件,用于在用户界面中展示层次结构数据,通常表现为目录树的形式。在`JTree2.0`版本中,这个组件得到了进一步的改进和增强,提供更丰富的功能...
这个项目"文件管理器(Jtree实现)"显然旨在创建一个类似Windows操作系统的文件资源管理器,让用户能够浏览、操作文件和目录。在这个实现中,`JTree`将被用来展示文件系统中的目录结构,而不仅仅是简单的数据结构。 ...
### JTree的用法详解 #### 一、引言 `JTree` 是 Java Swing 库中的一个重要组件,用于在图形用户界面 (GUI) 中显示层次结构数据。它非常适合用来展示具有分层关系的信息,例如文件系统目录结构、组织结构等。 ####...
为了响应用户的交互,比如点击或展开/折叠节点,我们可以为JTree添加事件监听器,如TreeSelectionListener和TreeWillExpandListener: ```java jTree.addTreeSelectionListener(new TreeSelectionListener() { ...
### JTree用法详解:...通过本文的介绍,你已经了解了如何使用`JTree`创建和管理复杂的树状结构,以及如何通过自定义渲染器来增强其视觉表现力。掌握这些技巧,将使你在开发具有复杂层次关系的应用时更加得心应手。
而JTree则是一个Java库,它提供了一个可交互的树视图组件,常用于展示层次结构的数据。将HTML转换为JTree的过程主要是为了在Java应用程序中以树状结构展示HTML文档的结构。 要实现这个转换,我们需要以下步骤: 1....
在例子中,使用了`FlowLayout`布局管理器将`JTree`添加到窗口中。 3. **节点的选中和信息获取**: JTree允许用户选择特定的节点。当用户选择节点时,可以通过监听`TreeSelectionListener`事件来获取选中的节点信息...
`JTree`是Java Swing的模型-视图-控制器(MVC)设计模式的一部分,其中树的数据结构由`DefaultTreeModel`类控制,`JTree`对象则是视图部分。 ### 1. 使用JTree 创建`JTree`的基本步骤如下: 1. **构建树模型**: ...