질문으로, 사용자가 노드 위로 마우스를 가져 가면 커서를 HAND_CURSOR
으로 변경할 수 있도록 마우스 수신기를 JTree
으로 설정하고 싶습니다.JTree에 마우스 수신기를 추가하여 노드 위로 마우스를 가져 가면 커서를 손 모양 커서로 변경할 수 있습니까?
내가 이미 MouseAdapter
이벤트를 클릭하여 처리하는 내 JTree가에 등록되어있는,하지만 난 얻을 수가없는 MouseMoved
또는 MouseEntered
/MouseExited
내가 할 노력하고있어 작동합니다.
제안 사항? 트리 노드의 각은이 나무에 관련된 TreeCellRenderer
에 의해 생성 된 레이블로 보여되고, JTree 내에서
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));
}
}
});
와우,이 작품은 훌륭합니다. 나는 MouseMotionAdapter를 사용할 생각이 전혀 없었다. MouseAdapter가 mouseMoved를 사용하는 것이 아니라 이것이 작동하는 이유를 설명하는주의? – thedude19
MouseAdapter는 MouseAdapter에서도 작동합니다. MouseAdapter는 MouseMotionListener 만 구현하는 반면 MouseAdapter는 거의 모든 마우스 관련 리스너 (MouseListener, MouseWheelListener 및 MouseMotionListener)를 구현합니다. mouseMoved() 메서드는 MouseMotionListener에 선언되어 있으므로 두 어댑터에서 모두 동일합니다. 이 예제에서는 모션에만 관심이 있으므로 MouseMotionListener/Adaptor로 충분하지만 앱이 다른 마우스 이벤트에 관심이있는 경우 MouseAdapter를 사용하는 것이 좋습니다. 희망이 도움이 ... – netzwerg