我正在尝试将事件处理程序添加到舞台的标题栏,但它不起作用。
我试过用这个:
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);
}
}
答案 0 :(得分:0)
据我所知,这是不可能的,因为用户期望与底层操作系统确定的标题栏交互产生某种行为。如果您开始在标题栏上处理鼠标事件,则可能会干扰此预期行为。
这就是说,通过设置primaryStage.initStyle(StageStyle.UNDECORATED);
隐藏标题栏,就可以实现自己的标题栏,提供自定义行为。
答案 1 :(得分:0)
我无法弄清楚如何使用系统默认标题栏执行任何操作。它不是一个节点,它不会在负坐标空间中响应。
可能的解决方法:创建自己的标题栏!
制作主舞台并将其设置为StageStyle.UNDECORATED。
使用像BorderPane这样的根窗格在顶部开发自己的标题栏。
请参阅此link以使UNDECORATED阶段可拖动(基本上拖动BorderPane的顶部)。
祝你好运!