【问题标题】:JavaFX - Add Event Handler To Stage's Title BarJavaFX - 将事件处理程序添加到舞台的标题栏
【发布时间】:2017-07-19 14:40:48
【问题描述】:

我正在尝试将事件处理程序添加到舞台的标题栏,但它不起作用。

我试过用这个:

primaryStage.addEVentHandler(MouseEvent.MOUSE_PRESSED, (event)->{
     System.out.println("ok");
});

但它只会将事件注册到场景区域,不会读取标题栏上的鼠标按下事件。

有没有办法监听舞台标题栏上的鼠标事件?

完整代码:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class demo extends Application {

    @Override
    public void start(final Stage primaryStage) {
        HBox box = new HBox();
        Scene scene = new Scene(box, 350, 250);

        Text text = new Text("Test");
        box.getChildren().add(text);

        primaryStage.addEventHandler(MouseEvent.MOUSE_PRESSED,(event) -> {
            System.out.println("ok");
        });
        primaryStage.setScene(scene);
        primaryStage.setTitle("TimePicker");
        primaryStage.show();
    }

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

【问题讨论】:

    标签: java javafx event-handling addeventlistener stage


    【解决方案1】:

    据我所知,这是不可能的,因为用户期望通过与标题栏的交互产生某种行为,这是由底层操作系统确定的。如果您开始处理标题栏上的鼠标事件,您可能会干扰这种预期的行为。

    也就是说,通过设置 primaryStage.initStyle(StageStyle.UNDECORATED); 隐藏标题栏,可以实现您自己的标题栏,提供您的自定义行为。

    【讨论】:

      【解决方案2】:

      我不知道如何使用系统默认标题栏做任何事情。它不是节点,在负坐标空间中没有响应。

      可能的解决方法:创建您自己的标题栏!

      制作您的主要舞台并将其设置为 StageStyle.UNDECORATED。

      使用像 BorderPane 这样的根窗格在顶部开发您自己的标题栏。

      请参阅此link 以使未装饰的舞台可拖动(基本上是拖动 BorderPane 的顶部)。

      祝你好运!

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-05
      相关资源
      最近更新 更多