treetable、顾名思义—— 提供了tree + table 的功能,是现代用户界面中一个常用的组件 。JXTreeTable是第三方组件库SwingX项目中的一个组件,弥补了Swing标准库中没有 treetable组件的缺憾 。TristateCheckBox是对JCheckBox的扩展——增加了一个“部分选中”状态,加上“选中”、“未选中”组成一个三态复选按钮。在本文中,主要演示在 JXTreeTable中增加 TristateCheckBox——从而实现checkboxtreetable这个新的Swing组件。
环境准备
我为什么要写这篇文章
我所在的部门,桌面应用的客户端都是由Java Swing构建的。有感于SUN对Swing基础构建支持的缺乏,我们用到了一些第三方组件库,SwingX是其中的一个。在使用JXTreeTable的时候,客户提出要用checkbox来保持选中的状态,一图胜千言:
虽然实现了需求,但是总感觉比较土,总想用checkboxtreetable来实现。可是JXTreeTable没有提供这个接口,只好靠
自己扩展了。感谢santhosh
的文章(见参考资料),在他研究的基础上我只做了少许的修改,请看效果图:
简介
看了最终的效果图之后,可以很容易的看出checkboxtreetable的特性,我来总结一下:
- 首先它是JXTreeTable的扩展。
- tree的每个节点前面都有一个三态复选按钮(TristateCheckBox),存在“部分选中”、“选中”、“未选中”3个状态。
- 当一个节点的复选按钮处于“选中”状态时,其所有子孙节点的复选按钮也会变为“选中”状态。反之亦然。
- 当一个节点的子孙节点部分选中时,那么该节点的复选按钮会呈现“部分选中”状态(一个灰色的小勾)。
- 当一个节点的子孙节点都处于“未选中”状态时,那么该节点的复选按钮会呈现“未选中”状态。
使用checkboxtreetable
上面的2张图由于是公司的商业产品,不能放源码上来。我在NetBeans下写了一个测试用的小项目,运行步骤如下:
- 从附件中下载jxtreetable_with_checkbox.zip到本地并解压。
- NetBeans主菜单依次选择“文件”——“打开项目”。
- 在弹出的“打开项目”对话框中选择刚才解压之后的jxtreetable_with_checkbox目录,点击“打开项目”按钮。
- 在“项目”视图中找到jxtreetable_with_checkbox项目,在上下文菜单中点击“运行”,可以看到以下结果:
源码解说
项目的源码放在2个package中,分述如下:
- org.jdesktop.swingx.ux:对JXTreeTable的扩展,checkboxtreetable的实现类都放这里了。
- TristateCheckBox:三态复选按钮的实现类。对于这个组件,也可以选择其他的实现,比如jide-oss。
- CheckTreeSelectionModel:保存对于树节点选中的状态。santhosh的实现,原样照搬。
- CheckTreeTableManager:监听mouse事件来改变TristateCheckBox的外观。santhosh的实现,只改了line 30以适应SwingX新版本的API。
- CheckTreeCellProvider:绘制复选按钮 + JLabel。这个我用SwingX提供的ComponentProvider替换了santhosh的TreeCellRenderer实现,具体说明待续。
- cn.vearn.checktreetable:我写的测试用的demo。
- TestBean:保存每个节点的各个字段信息。
- TestTreeTableModel:TreeTable的model。
- TestFrame1:demo入口。
参考资料
首先是santhosh的3篇blog
http://www.jroller.com/page/santhosh/20050610#jtree_with_checkboxes
http://jroller.com/page/santhosh?entry=jxtreetable_with_checkboxes
http://jroller.com/page/santhosh?entry=checktree_with_without_selection_digging
- 大小: 41.3 KB
- 大小: 48.4 KB
- 大小: 9.8 KB
分享到:
相关推荐
在这个主题"当JXTreeTable遇到TristateCheckBox(二)"中,我们可以推测博主可能在上一篇文章中介绍了`TristateCheckBox`的基础用法,而在本篇中更深入地探讨了如何将其应用到`JXTreeTable`中。`JXTreeTable`中的每个...
Swingx还包含了JXTreeTable,这是一个结合了树视图和表格视图的组件,对于展示层次结构的数据特别有用,例如文件系统或组织结构。此外,JXImagePanel允许你轻松地在应用程序中显示图像,并提供了缩放和平移的功能。 ...
- JXTreeTable:结合了JTree和JTable的功能,可以在表格中显示层次结构的数据。 - JXTaskPaneContainer:类似于Microsoft Office的任务窗格,可以组织和展示复杂的信息。 - JXToolBar:提供了更灵活的工具栏布局...
2. JXTreeTable:结合了JTree和JTable的功能,可以在树形结构中显示表格数据。 3. JXDatePicker和JXMonthView:高级日期选择器,提供更友好的用户交互。 4. JXToggleButton:可切换的按钮,支持多种样式和行为。 5. ...
SwingX是一个扩展了Java Swing库的开源项目,它提供了许多高级组件和功能,使得Java桌面应用的开发更加丰富和便捷。"swingxdemo.rar"是一个包含SwingX示例程序的压缩包,用于帮助开发者了解和学习如何使用SwingX库。...
2. **JXTreeTable**:结合了JTree和JTable的功能,允许在一个表格中显示层次结构的数据,用户可以展开和折叠树节点,同时处理表格数据。 3. **JXDatePicker**和**JXMonthView**:这两者是增强的日历选择组件,...
当数据发生更改时,需要更新相应的视图。 7. **自定义渲染器** - 为了自定义数据显示,我们需要为表格单元格和树节点创建自定义渲染器,通过实现TableCellRenderer和TreeCellRenderer接口。 8. **性能优化** - ...
SwingX库是Java Swing库的一个扩展,它提供了一系列丰富的组件和工具,使得开发者能够创建出功能更加强大且用户友好的图形用户界面(GUI)。在这个"学生成绩查询系统"中,开发者利用了SwingX库的优势,构建了一个...
一个可能不确定的复选框基本原理HTML5 为复选框提供了第三种状态,即“不确定”状态。 此属性只能使用 javascript 设置,如下例所示: var cb = document . getElementById ( 'whatever-checkbox' ) ;cb . ...
3. **JXTreeTable**:这是一个结合了树形视图和表格视图的组件,能够同时显示层次结构数据和表格数据,非常适合处理复杂的数据结构。 4. **JXBusyIndicator**:在进行耗时操作时,这个组件可以显示一个忙碌指示器,...
3. SwingXSet.jar:这应该是SwingX库的核心组件,包含了SwingX库的主要功能和组件,如JXTable、JXTreeTable等,这些组件提供了更丰富的数据展示和交互能力。 4. swingx-all-1.6.5-1.jar:这是SwingX库的一个完整...
SwingX是一个扩展了Java Swing库的开源项目,它的版本1.6提供了许多增强的组件和功能,使得Java开发者能够创建更加丰富、交互性更强的图形用户界面(GUI)。SwingX是Java开发者社区对标准Java Swing库的一个重要补充...
这里定义了一个简单的动作类`SubAction`,当该动作被触发时,会弹出一个新的窗口。 3. **创建折叠菜单类** ```java class FoldingMenu { // 创建第一个任务面板 void addNewPane1(String str, ...
SwingX包含了诸如JXTreeTable(结合了JTree和JTable的功能)、JXDatePicker(日期选择器)、JXToggleButton(切换按钮)等组件,使得开发者能够创建更为丰富、交互性更强的用户界面。此外,SwingX还提供了一些布局...
2. **JXTreeTable**: 结合了JTree和JTable的功能,可以同时展示数据的层次结构和表格形式。 3. **JXDatePicker**: 提供了一个更友好的日期选择组件,比标准的JCalendar更强大。 4. **JXToggleButton**: 一个带有复...
2. **JXTreeTable**:结合了JTree和JTable的特点,用于显示树状结构的数据,同时支持表格操作。 3. **JXDatePicker**:一个美观且易用的日期选择器,相比于JCalendar,它提供了更好的用户交互体验。 4. **...
SwingX是一个扩展Swing的开源项目,提供了额外的组件和工具,如JXDatePicker、JXTreeTable等,增加了Swing的功能性和易用性。在学生信息管理系统中,SwingX可能被用来实现更复杂的界面元素。 五、Java 7 系统使用的...
3. **swingx-0.9.3.jar**:这是SwingX库的一个早期版本,包含了对Java Swing的扩展,提供了额外的用户界面组件和功能,如JXTaskPane、JXTreeTable等。这些组件可以增强Eclipse的界面交互性,提供更好的用户体验。 ...
SwingX不仅限于日期控件,它还扩展了许多其他组件,如表格(JXTable)、树表(JXTreeTable)、图表(JFreeChart集成)、拖放支持、可定制的菜单和工具栏等。这些组件都具有高度的可定制性和灵活性,能满足开发者对于...