2017-07-19 56 views
0

我想添加事件处理程序到舞台的标题栏,但它不起作用。JavaFX - 添加事件处理程序到舞台的标题栏

我尝试使用这样的:

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

据我所知,这是不可能的,因为用户期望从相互作用如由底层操作系统确定的标题栏某种行为。如果你开始在标题栏上处理鼠标事件,你可能会干预这种预期的行为。

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

0

我想不出如何用系统默认标题栏做任何事情。它不是一个节点,它不会在负坐标空间中响应。

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

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

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

看到这个link为使一个UNDECORATED舞台可拖动(基本上拖动你的BorderPane的顶部)。

祝你好运!

+0

然后combobox做什么来隐藏弹出? – KeepMove

+0

对不起,弹出什么? – Eric

+0

包含此图片中显示的电子邮件的区域http://docs.oracle.com/javafx/2/ui_controls/img/combobox-simple.png – KeepMove