我需要在 JXTreeTable 中为单击的父节点及其所有子节点选择行。在带有已弃用 JXTreeTable 的旧 Swingx 中,可以使用 TreeSelectionListener 来完成。我有监听器(mTable 已弃用 JXTreeTable):
mTable.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
selectionPerformered(evt);
}
});
和方法 selectionPerformed(evt):
private void selectionPerformered(javax.swing.event.TreeSelectionEvent evt) {
boolean unlock = true;
TreePath parentPath = evt.getNewLeadSelectionPath();
if (parentPath != null) {
ListSelectionModel list = mTable.getSelectionModel();
TreeNode node = ((TreeNode) (parentPath.getLastPathComponent()));
if (node.getChildCount() > 0) {
TreePath path = new TreePath(
((DefaultTreeTableModel) mTable.getTreeTableModel()).getPathToRoot((TreeTableNode) node.getChildAt(0)));
int begin = mTable.getRowForPath(path);
path = new TreePath(
((DefaultTreeTableModel) mTable.getTreeTableModel()).getPathToRoot((TreeTableNode) node.getChildAt(node.getChildCount() - 1)));
int end = mTable.getRowForPath(path);
list.addSelectionInterval(begin, end);
}
unlock = false;
}
disableUnlock(unlock);
}
当我点击“组件”事件被触发了几次并使用 list.addSelectionInterval(begin, end); 选择工作正常,看起来像这样:
但是现在,使用新的 swingx 1.6,使用新的 JXTreeTable,当我在调试模式下单击“组件”时,此事件仅触发一次,因此结果如下所示:
例如,如果我单击“管理”程序选择这一行和接下来的 3 行及其子项。但是如果我单击“组件”,我需要为孩子和每个孩子的孩子选择这一行和所有行。如果你知道我的意思:) 有什么方法可以触发这个事件吗?或者也许还有另一种选择方式?