Javafx,如何检测鼠标位置?
Javafx, how to detect mouse position?
我使用 JavaFX 创建了一个蓝色矩形。
我能否在鼠标移入蓝色矩形覆盖的区域时将矩形的颜色更改为红色,并在鼠标移出矩形时变回蓝色?
我创建的矩形:
public class ColorfulRectangle extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 400, 300, Color.WHITE);
Rectangle rect1 = RectangleBuilder.create()
.x(50)
.y(50)
.width(100)
.height(100)
.fill(Color.BLUE)
.build();
root.getChildren().add(rect1);
primaryStage.setScene(scene);
primaryStage.show();
}
}
您可以将鼠标事件处理程序添加到要在其中跟踪鼠标位置的相应 JavaFX 组件:
final Label myLabel = new Label("Mouse Location Monitor");
myLabel.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent event) {
String msg = "(x: " + event.getX() + ", y: " + event.getY() + ")";
// do anything now.
}
});
我建议阅读一些关于 MouseEvents in JavaFX 的内容。
至于你的回答:
rect1.setOnMouseEntered(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
rect1.setFill(Color.RED);
}
});
rect1.setOnMouseExited(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
rect1.setFill(Color.BLUE);
}
});
除了其他答案中描述的基于鼠标事件的解决方案外,您还可以使用 CSS 执行此操作。在不指定填充的情况下创建 Rectangle
,并向其添加样式 class。 (请注意,您使用的 Builder
class 已弃用。)
向场景添加样式表。
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 400, 300, Color.WHITE);
scene.getStylesheets().add("rectangle-hover.css");
Rectangle rect1 = new Rectangle(50, 50, 100, 100);
rect1.getStyleClass().add("my-rectangle");
root.getChildren().add(rect1);
primaryStage.setScene(scene);
primaryStage.show();
}
然后在外部文件中定义样式:
矩形-hover.css:
.my-rectangle {
-fx-fill: blue ;
}
.my-rectangle:hover {
-fx-fill: red ;
}
我使用 JavaFX 创建了一个蓝色矩形。
我能否在鼠标移入蓝色矩形覆盖的区域时将矩形的颜色更改为红色,并在鼠标移出矩形时变回蓝色?
我创建的矩形:
public class ColorfulRectangle extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 400, 300, Color.WHITE);
Rectangle rect1 = RectangleBuilder.create()
.x(50)
.y(50)
.width(100)
.height(100)
.fill(Color.BLUE)
.build();
root.getChildren().add(rect1);
primaryStage.setScene(scene);
primaryStage.show();
}
}
您可以将鼠标事件处理程序添加到要在其中跟踪鼠标位置的相应 JavaFX 组件:
final Label myLabel = new Label("Mouse Location Monitor");
myLabel.setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent event) {
String msg = "(x: " + event.getX() + ", y: " + event.getY() + ")";
// do anything now.
}
});
我建议阅读一些关于 MouseEvents in JavaFX 的内容。
至于你的回答:
rect1.setOnMouseEntered(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
rect1.setFill(Color.RED);
}
});
rect1.setOnMouseExited(new EventHandler<MouseEvent>() {
public void handle(MouseEvent me) {
rect1.setFill(Color.BLUE);
}
});
除了其他答案中描述的基于鼠标事件的解决方案外,您还可以使用 CSS 执行此操作。在不指定填充的情况下创建 Rectangle
,并向其添加样式 class。 (请注意,您使用的 Builder
class 已弃用。)
向场景添加样式表。
@Override
public void start(Stage primaryStage) {
Group root = new Group();
Scene scene = new Scene(root, 400, 300, Color.WHITE);
scene.getStylesheets().add("rectangle-hover.css");
Rectangle rect1 = new Rectangle(50, 50, 100, 100);
rect1.getStyleClass().add("my-rectangle");
root.getChildren().add(rect1);
primaryStage.setScene(scene);
primaryStage.show();
}
然后在外部文件中定义样式:
矩形-hover.css:
.my-rectangle {
-fx-fill: blue ;
}
.my-rectangle:hover {
-fx-fill: red ;
}