这是本系列的第二部分。在 第一部分
讲述checkboxtreetable用法的基础上,用一个demo演示了如何在程序中获取被选中的节点,以及设置节点前checkbox的状态。
运行本demo
- 在本系列的第一部分下载 jxtreetable_with_checkbox.zip
到本地并解压。
- NetBeans主菜单依次选择“文件”——“打开项目”。
- 在弹出的“打开项目”对话框中选择刚才解压之后的jxtreetable_with_checkbox目录,点击“打开项目”按钮。
- 在附件中下载TestFrame2.zip解压为TestFrame2.java放到cn.vearn.checktreetable包下。
- “项目”视图选中TestFrame2,按Shift + F6运行文件。
- 选中“getSelectionPaths返回被选中节点的子孙”复选按钮,点击“获取被选中的节点”按钮。
设置节点前checkbox的状态
那位可能要说了:这还用讲,在节点前checkbox上点一下左键呗。厄,您说得对,但有时候需要在程序中设置某个节点是否被选中。在本文附带的demo中会对checkboxTreeTable中的每一个节点按50%的概率设置是否被选中。闲话少说,看以下代码:
// JXTreeTable构造方法
JXTreeTable treetable = new JXTreeTable(new TestTreeTableModel(createDummyData()));
// 构造checkboxtreetable、紧跟JXTreeTable构造方法。否则...
manager = new CheckTreeTableManager(treetable);
// 设置被选中的节点
manager.getSelectionModel().addPathsByNodes(selectedNodes);
其中最后一行使用addPathsByNode方法设置被选中的节点,其中的参数selectedNodes是List的实现,再看createDummyData私有方法,只需要把要设置成选中状态的节点加到selectedNodes中就可以了:
/**
* 构造一个treetablemodel并返回根结点
*
* @return 根结点
*/
private DefaultMutableTreeTableNode createDummyData() {
selectedNodes = new ArrayList<DefaultMutableTreeTableNode>();
Random random = new Random();
TestBean rootbean = new TestBean("根");
DefaultMutableTreeTableNode root = new DefaultMutableTreeTableNode(rootbean);
for (int i = 0; i < 3; i++) {
TestBean tb = new TestBean("结点" + i);
DefaultMutableTreeTableNode node = new DefaultMutableTreeTableNode(tb);
for (int j = 0; j < 3; j++) {
TestBean leaf = new TestBean("叶子" + i + "-" + j);
DefaultMutableTreeTableNode tmp = new DefaultMutableTreeTableNode(leaf);
node.add(tmp);
if (random.nextInt(2) == 0) { // 对于每个叶子节点有50%的概率被选中
selectedNodes.add(tmp);
}
}
root.add(node);
}
return root;
}
dig-in模式
在讲解获取被选中的节点
之前,先来说说dig-in模式。这个我也不知道咋翻译,大概说下意思:如果checkboxtreetable处于dig-in模式,那么选中一个节点之后其所有子孙节点都会被选中。如果不处于dig-in呢,那么所有节点只有2种状态(选中或是未选中,没有“部分选中”了),也就是说所有节点的选中状态都是独立的,不会存在选中这个节点把另一个也选中的情况出现。
我实现的这个checkboxtreetable是dig-in的,这样做的好处是当一个节点下子孙节点很多时,可以通过选中该节点达到全选和全不选的功能,挺方便的。
获取被选中的节点
通常再选中某些节点后,我们需要获取它们。步骤如下:
- 通过CheckTreeSelectionModel的getSelectionPaths方法获取所有被选中节点的TreePath数组。
- 调用每一个TreePath的getLastPathComponent方法获得DefaultMutableTreeTableNode的引用。
- 调用每个节点的getUserObject方法获得节点对象的引用。
- 从userObject中取得需要的字段。
TreePath[] treePaths = manager.getSelectionModel().getSelectionPaths();
if (treePaths != null) {
for (TreePath path : treePaths) {
DefaultMutableTreeTableNode node = (DefaultMutableTreeTableNode) path.getLastPathComponent();
TestBean obj = (TestBean) node.getUserObject();
// 根据需要对obj进行处理
}
}
上面说过在dig-in模式中,选中一个节点之后其所有子孙节点都会被选中。与此同时getSelectionPaths方法只返回
这个节点的TreePath。这样的话,如果我们需要获取它的所有子孙,就需要做一些处理了。在这个demo中定义了一个方法selectedNodeToString,当一个节点是叶子节点,那么把其name字段加到StringBuffer中;如果不是,获取其所有的子节点,对每一个节点递归调用selectedNodeToString方法。
- 大小: 32.4 KB
分享到:
相关推荐
这篇博客“当JXTreeTable遇到TristateCheckBox(一)”很可能是讨论如何在JXTreeTable中集成TristateCheckBox,以提供更复杂的用户交互体验。 首先,我们要理解JXTreeTable。它是SwingX库的一部分,SwingX是Java ...
Swingx还包含了JXTreeTable,这是一个结合了树视图和表格视图的组件,对于展示层次结构的数据特别有用,例如文件系统或组织结构。此外,JXImagePanel允许你轻松地在应用程序中显示图像,并提供了缩放和平移的功能。 ...
- JXTreeTable:结合了JTree和JTable的功能,可以在表格中显示层次结构的数据。 - JXTaskPaneContainer:类似于Microsoft Office的任务窗格,可以组织和展示复杂的信息。 - JXToolBar:提供了更灵活的工具栏布局...
2. JXTreeTable:结合了JTree和JTable的功能,可以在树形结构中显示表格数据。 3. JXDatePicker和JXMonthView:高级日期选择器,提供更友好的用户交互。 4. JXToggleButton:可切换的按钮,支持多种样式和行为。 5. ...
当数据发生更改时,需要更新相应的视图。 7. **自定义渲染器** - 为了自定义数据显示,我们需要为表格单元格和树节点创建自定义渲染器,通过实现TableCellRenderer和TreeCellRenderer接口。 8. **性能优化** - ...
2. **JXTreeTable**:结合了JTree和JTable的功能,允许在一个表格中显示层次结构的数据,用户可以展开和折叠树节点,同时处理表格数据。 3. **JXDatePicker**和**JXMonthView**:这两者是增强的日历选择组件,...
<input is="tristate-checkbox">... 此属性只能使用 javascript 设置,如下例所示: var cb = document . getElementById ( 'whatever-checkbox' ) ;cb .... 以下示例将无法按预期工作: < input type =" ...
这些组件包括但不限于:JXDatePicker(日期选择器)、JXTaskPane(任务窗格)、JXTreeTable(树表组合组件)等。SwingX的设计目标是提高开发者的生产力,提供更多的UI选项,以及增强的用户体验。 在"swingxdemo"这...
1. **组件扩展**:SwingX提供了许多新的组件,如JXTable、JXTabs、JXDatePicker、JXTreeTable等,这些组件具有更丰富的功能和更好的用户体验。例如,JXTable支持复杂的表格操作,如排序、过滤和分页;JXDatePicker...
其次,SwingX还提供了JXTreeTable,将树形结构与表格结合在一起,用于处理层级关系的数据,例如班级-学生的关系。在这个系统中,可能通过JXTreeTable来组织年级、班级和学生的层次结构,方便用户快速定位到特定的...
1. **JXTreeTable**:这是一个复合组件,结合了JTree和JTable的优点,允许用户同时查看和操作树形结构和表格数据。这对于展示具有层次关系的数据非常有用。 2. **JXDatePicker** 和 **JXDateTimePicker**:这些日期...
SwingX是一个扩展Swing的开源项目,提供了额外的组件和工具,如JXDatePicker、JXTreeTable等,增加了Swing的功能性和易用性。在学生信息管理系统中,SwingX可能被用来实现更复杂的界面元素。 五、Java 7 系统使用的...
### 使用SwingX创建折叠菜单 #### 概述 SwingX是Swing的一个扩展库,为Java开发者提供了丰富的UI组件以及更为灵活的...SwingX还提供了许多其他高级组件,如`JXTreeTable`、`JXMapViewer`等,值得进一步探索和学习。
SwingX不仅限于日期控件,它还扩展了许多其他组件,如表格(JXTable)、树表(JXTreeTable)、图表(JFreeChart集成)、拖放支持、可定制的菜单和工具栏等。这些组件都具有高度的可定制性和灵活性,能满足开发者对于...
2. **JXTreeTable**: 结合了JTree和JTable的组件,显示树形结构和表格数据。 3. **JXDatePicker**: 提供一个日期选择器,比标准的JCalendar组件更易用。 4. **JXDatePicker**: 提供一个日期选择器,比标准的...
SwingX库则进一步扩展了Swing的功能,提供了更多的组件和布局,如JXTable、JXTreeTable等,这些组件在数据展示和操作上更为灵活和强大。SwingX还包含了一些高级控件,如日期选择器、颜色选择器等,使得开发者能更...
SwingX库中的JXTreeTable是一个很好的例子,它结合了JTree和JTable的功能,可以在同一视图中显示树形结构和表格数据。开发者可以通过源码研究它的事件处理、数据绑定和渲染机制,这对于开发复杂的业务应用非常有指导...
SwingX包含了诸如JXTreeTable(结合了JTree和JTable的功能)、JXDatePicker(日期选择器)、JXToggleButton(切换按钮)等组件,使得开发者能够创建更为丰富、交互性更强的用户界面。此外,SwingX还提供了一些布局...
swing 扩展组件包,很多有用的组件,比如 日历控件,时间控件,treeTable 控件