}
public void valueChanged(ListSelectionEvent e) {
List<SyncFileNode> selectedNodes = new ArrayList<SyncFileNode>();
ListSelectionModel selectionModel = table.getSelectionModel();
final TopComponent tc = (TopComponent) SwingUtilities.getAncestorOfClass(TopComponent.class, table);
if (tc == null) {
return; // table is no longer in component hierarchy
}
int min = selectionModel.getMinSelectionIndex();
if (min != -1) {
int max = selectionModel.getMaxSelectionIndex();
for (int i = min; i <= max; i++) {
if (selectionModel.isSelectedIndex(i)) {
int idx = sorter.modelIndex(i);
selectedNodes.add(nodes[idx]);
}
}
}
// this method may be called outside of AWT if a node fires change events from some other thread, see #79174
final Node[] nodes = selectedNodes.toArray(new Node[selectedNodes.size()]);
if (SwingUtilities.isEventDispatchThread()) {
tc.setActivatedNodes(nodes);
} else {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
tc.setActivatedNodes(nodes);
}
});
}
}