如何检查鼠标光标是不是在 Javafx 中的按钮上?

Posted

技术标签:

【中文标题】如何检查鼠标光标是不是在 Javafx 中的按钮上?【英文标题】:How to check is mouse cursor is on the button in Java FX?如何检查鼠标光标是否在 Javafx 中的按钮上? 【发布时间】:2019-05-05 03:35:05 【问题描述】:

我是 Java 新手,我想知道是否可以检查鼠标光标是否在按钮上?我的意思是没有点击事件,只是在按钮上移动光标。

我的工作代码得到点击然后打印一些东西,但我想稍微改变一下,但我不知道为什么它不起作用。

public class Main extends Application implements EventHandler<MouseEvent> 

Button button;
Stage window;
Scene scene;

@Override
public void start(Stage primaryStage) throws Exception 
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
    primaryStage.setTitle("Where's the button?");
    button.setText("Click me!");
    button.setOnMouseMoved(this);

    StackPane layout = new StackPane();
    layout.getChildren().add(button);

    Scene scene = new Scene(layout, 300,350);
    primaryStage.setScene(scene);
    primaryStage.show();




public static void main(String[] args) 
    launch(args);


@Override
public void handle(MouseEvent actionEvent) 
    System.out.println("You clicked the button!");


【问题讨论】:

回答为评论,因为我不确定了:我想我可能记得 Button 有 hoverProperty() 或类似的东西。编辑:是的,this 可能会有所帮助! 【参考方案1】:

我为你做了小代码。看一看。它在控制台中打印“Ho-Ho-Ho-Hovereed!”将鼠标悬停在按钮上。

 @Override
    public void start(Stage primaryStage) 
        Button btn = new Button();
        btn.setText("Hover over me.'");

        btn.hoverProperty().addListener((event)->System.out.println("Ho-Ho-Ho-Hovereeed!"));        

        StackPane root = new StackPane();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Mouse manpulation example in JavaFX!");
        primaryStage.setScene(scene);
        primaryStage.show();
    

【讨论】:

【参考方案2】:

我猜你可以使用事件处理程序或 css 来做到这一点,比如...

button.setOnMouseEntered(new EventHandler<MouseEvent>() 
        @Override
        public void handle(MouseEvent mouseEvent)                 
            System.out.println("Cursor Over Button");
        
    );

或/带有样式(css)

.button:hover -fx-background-color: red;

【讨论】:

【参考方案3】:

每个Node 都提供一个hover 属性来跟踪鼠标光标是否悬停在它上面。通过使用简单的侦听器,您可以检测鼠标何时开始和停止悬停:

button.hoverProperty().addListener((observable, oldValue, newValue) -> 
    if (newValue) 
        System.out.println("Hovering...");
     else 
        System.out.println("Retreating...");
    
);

使用此侦听器,如果鼠标当前悬停在按钮上,newValue 将始终为 true,并在鼠标离开该区域时更改为 false

【讨论】:

【参考方案4】:

在节点上还有一个有用的检查 - isHover() 您可以在 MouseEvents 上使用它来检查鼠标是否悬停在所需的节点上。这样的提示;)

【讨论】:

【参考方案5】:
button.setOnMouseEntered( (event ) -> 
        button.setTranslateX(button.getTranslateX() + 20);
        button.setTranslateY(button.getTranslateY() + 20);

    );`

用我的代码替换button.setOnMouseMoved(this);。这样就可以了!

【讨论】:

你的代码实际上做了什么?它如何从概念上回答这个问题?

以上是关于如何检查鼠标光标是不是在 Javafx 中的按钮上?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查鼠标是不是在控件上

如何在 JavaFX 按钮上设置工具提示?

如何在 JavaFX 中的 SplitPane Divider 上检测鼠标拖动事件

js在opera下怎样获取可编辑div中的鼠标光标和选中文本

JavaFX:在进入 TextArea 时将插入符号/光标放在 TextArea 的末尾

MFC如何让鼠标移动到按钮上马上改变鼠标形状为手型