我有一個ArrayList裏面保存了Path對象,並且每個路徑都有它自己的EventHandler。然而,當我鼠標移到某個路徑進而影響.setOnMouseEntered應用到ArrayList內的所有路徑,而不是某一個:如何從列表中選擇特定節點並對其應用效果?
Path path;
Group root = new Group();
ArrayList<Path> paths = new ArrayList<Path>();
EventHandler<MouseEvent> mouseEventHandler = new EventHandler<MouseEvent>() {
@Override
public void handle (MouseEvent e) {
if (i == 0) {
if (e.getEventType() == MouseEvent.MOUSE_PRESSED) {
path = new Path();
path.setStroke(Color.BLACK);
path.setStrokeWidth(10);
root.getChildren().add(path);
path.getElements().add(new MoveTo(e.getX(), e.getY()));
}
if (e.getEventType() == MouseEvent.MOUSE_DRAGGED) {
path.getElements().add(new LineTo(e.getX(), e.getY()));
}
if (e.getEventType() == MouseEvent.MOUSE_RELEASED) {
path.getElements().add(new LineTo(e.getX(), e.getY()));
for (Path path : paths) {
path.setOnMouseEntered(mouseEventHandler2);
path.setOnMouseExited(mouseEventHandler2);
path.setOnMouseDragged(mouseEventHandler2);
}
paths.add(path);
}
}
}
EventHandler<MouseEvent> mouseEventHandler2 = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
if (me.getEventType() == MouseEvent.MOUSE_ENTERED) {
path.setEffect(new DropShadow(20, Color.BLACK));
}
if (me.getEventType() == MouseEvent.MOUSE_EXITED) {
path.setEffect(null);
}
if (me.getEventType() == MouseEvent.MOUSE_DRAGGED) {
path.relocate(me.getX(), me.getY());
}
}
};
所以這裏mouseEventHandler2被應用到所有的路徑ArrayList的路徑裏面,而不是某一個其中有MOUSE_ENTERED或MOUSE_EXITED
顯示代碼如何將這些路徑添加到場景中。你可能會認爲你在某個路徑上鼠標懸停,但實際上覆蓋了所有路徑。 – 2014-10-27 15:26:58