是否可以检测鼠标光标何时在JavaFX中隐藏的舞台或场景?

时间:2014-12-13 23:20:59

标签: java javafx mouseover stage scene

我试图实现一个存在于舞台上的控件,当显示鼠标时,然后当鼠标离开它时,隐藏自己。

我已经尝试了

Stage.getScene().setOnMouseEntered((MouseEvent mEntered) -> {Stage.show();});
Stage.getScene().setOnMouseExited((MouseEvent mExited) -> {Stage.hide();});

我并不感到非常惊讶它没有工作,但它对我没有多大帮助。

当隐藏鼠标时,是否可以检测鼠标何时在舞台或场景上?

1 个答案:

答案 0 :(得分:0)

我现在已经阅读了你的多个线程,并且当你把它们放在一起时没有得到你真正打算实现的东西。也许如果你详细说明,另一种解决方案可能更合适。

无论如何,对于透明按钮,解决方案是使用足够低的透明度让下面的内容透过,但仍然不完全透明以便注册鼠标事件。如果应用程序完全透明,则不会在应用程序上获得鼠标事件。

以下是有关如何执行此操作的示例:

import javafx.animation.FadeTransition;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Duration;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        try {            


            Pane pane = new Pane();

            HBox hbox = new HBox();

            hbox.setSpacing(12);

            Button button1 = new Button("Button 1");
            Button button2 = new Button("OMG Magic!");
            Button button3 = new Button("Button 3");

            hbox.getChildren().addAll(button1, button2, button3);

            pane.getChildren().add( hbox);


            final Scene scene = new Scene(pane, Color.TRANSPARENT);

//          scene.getRoot().setStyle("-fx-background-color: transparent");
            scene.getRoot().setStyle("-fx-background-color: rgba(1,1,1,0.004)");

            primaryStage.initStyle(StageStyle.TRANSPARENT);
            primaryStage.setScene(scene);

            primaryStage.show();

            // initial opacity of button 2
            button2.setOpacity(0.0);

            // button2: fade-in on mouse scene enter
            scene.addEventHandler(MouseEvent.MOUSE_ENTERED, evt ->  {

                System.out.println("Mouse entered");

                FadeTransition fadeTransition = new FadeTransition(Duration.millis(300), button2);
                fadeTransition.setFromValue(0.0);
                fadeTransition.setToValue(1.0);
                fadeTransition.play();

            });

            // button2: fade-out on mouse scene exit
            scene.addEventHandler(MouseEvent.MOUSE_EXITED, evt ->  {

                System.out.println("Mouse exited");

                FadeTransition fadeTransition = new FadeTransition(Duration.millis(300), button2);
                fadeTransition.setFromValue(1.0);
                fadeTransition.setToValue(0.0);
                fadeTransition.play();              
            });   


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

显示3个按钮。当您使用鼠标进入按钮2或按钮1和按钮3之间的窗格时,按钮2将会神奇地出现: - )