我试图实现一个存在于舞台上的控件,当显示鼠标时,然后当鼠标离开它时,隐藏自己。
我已经尝试了
Stage.getScene().setOnMouseEntered((MouseEvent mEntered) -> {Stage.show();});
Stage.getScene().setOnMouseExited((MouseEvent mExited) -> {Stage.hide();});
我并不感到非常惊讶它没有工作,但它对我没有多大帮助。
当隐藏鼠标时,是否可以检测鼠标何时在舞台或场景上?
答案 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将会神奇地出现: - )