Как добавить слушатель мыши в JTree, чтобы я мог изменить курсор (на курсор в виде руки) при наведении курсора на узел? - PullRequest
2 голосов
/ 17 марта 2010

Как говорится в вопросе, я бы хотел установить для слушателя мыши значение JTree, чтобы я мог изменить курсор на HAND_CURSOR, когда пользователь наводит указатель мыши на узел.

У меня уже есть MouseAdapter, зарегистрированный на моем JTree для обработки событий щелчка, но я не могу заставить MouseMoved или MouseEntered / MouseExited работать с тем, что я пытаюсь сделать.

Есть предложения?

Ответы [ 2 ]

7 голосов
/ 17 марта 2010

Вам необходимо добавить MouseMotionListener/Adapter:

tree.addMouseMotionListener(new MouseMotionAdapter() {
    @Override
    public void mouseMoved(MouseEvent e) {
        int x = (int) e.getPoint().getX();
        int y = (int) e.getPoint().getY();
        TreePath path = tree.getPathForLocation(x, y);
        if (path == null) {
            tree.setCursor(Cursor.getDefaultCursor());
        } else {
            tree.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        }
    }
});
1 голос
/ 17 марта 2010

В JTree каждый узел дерева показан меткой, сгенерированной TreeCellRenderer, связанной с этим деревом. Обычно используемый класс DefaultTreeCellRenderer, который отображает это (DefaultTreeCellRenderer). Как следствие, вы можете попробовать добавить DefaultTreeCellRenderer MouseMotionListener для переключения курсора мыши.

Обратите внимание, что добавление MouseMotionListener в дерево будет просто переключать рендеринг мыши, когда на компоненте Tree, а не когда мышь на метке.

...