Group
のルートがあり、Rectangle
クラスの正方形、Polygon
クラスの三角形、Circle
クラスの円がそのグループに追加されました。これらの3つのオブジェクトは、すべて異なる色で構築されています。マウスが入っているときにオブジェクトの色を変更し、外に出たときに元の色に変更します。JavaFx
タスク:マウスが特定のオブジェクト上にある場合、そのオブジェクトの色を変更します。マウスがそのオブジェクトから外れている場合、色は元に戻ります。ここで
は、私がやったことだ:
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Polygon;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class ColouredShapes extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Group group = new Group();
// square
Rectangle square = new Rectangle(40,40);
square.setFill(Color.BLUE);
// triangle
Polygon triangle = new Polygon();
triangle.setLayoutX(80);
triangle.getPoints().addAll(
40.0,0.0,
80.0,40.0,
0.0,40.0
);
triangle.setFill(Color.RED);
//circle
Circle circle = new Circle(20);
circle.setLayoutX(240);
circle.setCenterY(20);
// ************** where everything happens *****************
group.onMouseMovedProperty().set(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.printf("coordinate X: %.2f, coordinate Y: %.2f\n",event.getX(),event.getY());
System.out.println(event.getSource());
if (event.getSource() instanceof Rectangle) {
square.setFill(Color.MAGENTA);
} else square.setFill(Color.BLUE);
}
});
group.getChildren().add(circle);
group.getChildren().add(triangle);
group.getChildren().add(square);
Scene scene = new Scene(group,700,500);
primaryStage.setScene(scene);
primaryStage.show();
} }
問題がevent.getSource()
戻り[email protected][styleClass=root]
の結果ではなく、その子のクラスです。その結果、子供が特定できなくなり、マウスがその子供に入ったときに色が変わることはありません。