Этот вопрос задавался давным-давно, и я не знаю, нужно ли вам это по-прежнему ...
Я понимаю, что у вас есть проблема, проблема в том, что слушатели выбора дерева не делаютработать, как вы могли ожидать.Вы должны обнаружить событие щелчка, зарегистрировав слушателя мыши.Примерно так:
tree = new JTree();
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
MouseListener ml = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int selRow = tree.getRowForLocation(e.getX(), e.getY());
currentRow = selRow;
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if (selRow != -1) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(selPath.getLastPathComponent());
if (node != null && node.isLeaf()) {
String stringId = '<sting-id-of-node-you-wish-to-scroll-to>';
TreePath tp = tree.getNextMatch(stringId, currentRow, Position.Bias.Forward);
if (tp == null) {
tp = tree.getNextMatch(stringId, currentRow, Position.Bias.Backward);
}
tree.setSelectionPath(tp);
tree.scrollPathToVisible(tp);
}
}
}
};
tree.addMouseListener(ml);
Ура!