这篇小文是本系列( 第一部分
第二部分
)的最终章。主要说下与checkboxtreetable组件相关的几个hack技巧。
运行本demo
- 在本系列的第一部分下载 jxtreetable_with_checkbox.zip
到本地并解压。
- NetBeans主菜单依次选择“文件”——“打开项目”。
- 在弹出的“打开项目”对话框中选择刚才解压之后的jxtreetable_with_checkbox目录,点击“打开项目”按钮。
- 在附件中下载TestFrame3.zip解压为TestFrame3.java放到cn.vearn.checktreetable包下。
- 在附件中下载CheckTreeTableManager2.zip解压为CheckTreeTableManager2.java放到org.jdesktop.swingx.ux包下。
- “项目”视图选中TestFrame3,按Shift + F6运行文件。
- 点击“显示highlighter”复选按钮,可以切换是否Highlighter。
- 点击“禁止列交换”复选按钮,可以切换是否允许通过鼠标拖拽进行列交换。
#1
设置Highlighter
swingx中的Highlighter内容很丰富,不过在这里只是简单地对奇偶行用不同背景色。实现这个很简单:
checkbox1 = new JCheckBox("显示highlighter");
checkbox1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
treetable.setHighlighters(checkbox1.isSelected() ? HighlighterFactory.createSimpleStriping() : null);
}
});
效果是这个样子的:
#2
禁止列交换
JTable有这样一个特性:通过鼠标拖拽表头中某一列可以对列进行交换。checkboxtreetable也继承了这个特性。不过这导致了一个问题,如果将包含JTree的第一列交换后(见下图),我们无法通过点击树节点之前的checkbox来改变选中状态了。这是由于CheckTreeTableManager通过监听mouseClicked事件来判断鼠标点击坐标,来选中树节点之前的checkbox,交换列之后改变了坐标位置,导致不能改变树节点之前的checkbox。
解决方法也很简单,禁止列交换就可以了:
checkbox2 = new JCheckBox("禁止列交换");
checkbox2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
treetable.getTableHeader().setReorderingAllowed(checkbox2.isSelected() ? false : true);
}
});
要是希望含JTree的第一列固定,其他列可以交换可以吗?可以的,不过有点麻烦:
treetable = new JXTreeTable(new TestTreeTableModel(createDummyData())) {
protected JTableHeader createDefaultTableHeader() {
return new JTableHeader(columnModel) {
@Override
public void setDraggedColumn(TableColumn aColumn) {
if (aColumn == getColumnModel().getColumn(0)) {
return;
}
super.setDraggedColumn(aColumn);
}
};
}
protected TableColumnModel createDefaultColumnModel() {
return new DefaultTableColumnModel() {
public void moveColumn(int columnIndex, int newIndex) {
if (columnIndex == 0 || newIndex == 0) {
return;
}
super.moveColumn(columnIndex, newIndex);
}
};
}
}; // JXTreeTable构造方法
#3
更换CheckTreeTableManager
在#2中我们已经发现一个问题,也就是CheckTreeTableManager实际上是以一种hack手段(判断点击坐标位置)来改变checkbox的状态。那么我们换一种方式来实现,通过选中一行(或多行)来选中树节点前的checkbox,用TreeSelectionListener来监听用户事件:
public void valueChanged(TreeSelectionEvent e) {
TreePath path = e.getPath();
...
}
获得TreePath的引用之后,就和之前的实现一样了。不过这种方式也带来了几个问题:
- 选中chechbox的行为比较怪异,其他UI库中的checkboxtreetable都是通过点击树节点前的checkbox来改变其状态。
- 只要在某一行点击,就会改变checkbox状态,容易误操作。
- 先选中一个树节点的checkbox,如果想取消选中,需要按住Ctrl在取消选中该行(Windows环境下),很麻烦。
CheckTreeTableManager和CheckTreeTableManager2究竟如何选择,看您了。
后记
虽然swing在国内比较冷清,但我还是尽力写好这个系列。是santhosh
的文章帮助我在项目中用上了checkboxtreetable,那么我也希望对社区做一些贡献。能帮上一个人少走些弯路,目的就达到了。本系列至此全部结束,谢谢大家!
- 大小: 18.7 KB
- 大小: 20.9 KB
分享到:
相关推荐
这篇博客“当JXTreeTable遇到TristateCheckBox(一)”很可能是讨论如何在JXTreeTable中集成TristateCheckBox,以提供更复杂的用户交互体验。 首先,我们要理解JXTreeTable。它是SwingX库的一部分,SwingX是Java ...
在这个主题"当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. ...
- 要实现TreeTable,可以使用NetBeans IDE提供的Visual Library或第三方库SwingX。SwingX库提供了JXTreeTable类,它扩展了JTable,添加了对树形数据的支持。 4. **JXTreeTable** - SwingX的JXTreeTable是实现...
一个可能不确定的复选框基本原理HTML5 为复选框提供了第三种状态,即“不确定”状态。 此属性只能使用 javascript 设置,如下例所示: var cb = document . getElementById ( 'whatever-checkbox' ) ;cb . ...
2. **JXTreeTable**:结合了JTree和JTable的功能,允许在一个表格中显示层次结构的数据,用户可以展开和折叠树节点,同时处理表格数据。 3. **JXDatePicker**和**JXMonthView**:这两者是增强的日历选择组件,...
SwingX是一个扩展Swing的开源项目,提供了额外的组件和工具,如JXDatePicker、JXTreeTable等,增加了Swing的功能性和易用性。在学生信息管理系统中,SwingX可能被用来实现更复杂的界面元素。 五、Java 7 系统使用的...
这些组件包括但不限于:JXDatePicker(日期选择器)、JXTaskPane(任务窗格)、JXTreeTable(树表组合组件)等。SwingX的设计目标是提高开发者的生产力,提供更多的UI选项,以及增强的用户体验。 在"swingxdemo"这...
1. **组件扩展**:SwingX提供了许多新的组件,如JXTable、JXTabs、JXDatePicker、JXTreeTable等,这些组件具有更丰富的功能和更好的用户体验。例如,JXTable支持复杂的表格操作,如排序、过滤和分页;JXDatePicker...
其次,SwingX还提供了JXTreeTable,将树形结构与表格结合在一起,用于处理层级关系的数据,例如班级-学生的关系。在这个系统中,可能通过JXTreeTable来组织年级、班级和学生的层次结构,方便用户快速定位到特定的...
3. SwingXSet.jar:这应该是SwingX库的核心组件,包含了SwingX库的主要功能和组件,如JXTable、JXTreeTable等,这些组件提供了更丰富的数据展示和交互能力。 4. swingx-all-1.6.5-1.jar:这是SwingX库的一个完整...
SwingX不仅限于日期控件,它还扩展了许多其他组件,如表格(JXTable)、树表(JXTreeTable)、图表(JFreeChart集成)、拖放支持、可定制的菜单和工具栏等。这些组件都具有高度的可定制性和灵活性,能满足开发者对于...
SwingX库则进一步扩展了Swing的功能,提供了更多的组件和布局,如JXTable、JXTreeTable等,这些组件在数据展示和操作上更为灵活和强大。SwingX还包含了一些高级控件,如日期选择器、颜色选择器等,使得开发者能更...
SwingX库中的JXTreeTable是一个很好的例子,它结合了JTree和JTable的功能,可以在同一视图中显示树形结构和表格数据。开发者可以通过源码研究它的事件处理、数据绑定和渲染机制,这对于开发复杂的业务应用非常有指导...
SwingX包含了诸如JXTreeTable(结合了JTree和JTable的功能)、JXDatePicker(日期选择器)、JXToggleButton(切换按钮)等组件,使得开发者能够创建更为丰富、交互性更强的用户界面。此外,SwingX还提供了一些布局...
swing 扩展组件包,很多有用的组件,比如 日历控件,时间控件,treeTable 控件
2. **JXTreeTable**:结合了JTree和JTable的特点,用于显示树状结构的数据,同时支持表格操作。 3. **JXDatePicker**:一个美观且易用的日期选择器,相比于JCalendar,它提供了更好的用户交互体验。 4. **...
1. **增强的组件**:SwingX添加了一系列新的组件,如JXDatePicker(日期选择器)、JXTaskPane(任务窗格)、JXTreeTable(树表组合)、JXToggleButton(切换按钮)等。这些组件提供了比原生Swing更多的交互性和视觉...