JavaFX DatePicker 隐藏在 mouseExited 上
JavaFX DatePicker hide on mouseExited
我该如何设置这种行为?目前悬停(mouseEntered)很好,只要光标进入 DatePicker 就会显示 DateChooser,但是只要鼠标离开 DatePicker 它就会隐藏 DateChooser。我找不到可以访问 DateChooser 本身的方法。
仅修复了当光标移到 DatePicker 下时不关闭 DateChooser,但只要鼠标离开 DateChooser 就应该关闭。
datePicker.setOnMouseEntered((event)->{datePicker.requestFocus();datePicker.show();});
datePicker.setOnMouseExited((event)->{if(event.getY()<23)datePicker.hide();});
访问皮肤允许您访问弹出窗口的内容,这允许您访问弹出窗口的 Scene
,这允许您向该场景添加一个 onMouseExited
处理程序以隐藏弹出窗口:
EventHandler<MouseEvent> exitHandler = e -> datePicker.hide();
datePicker.setOnShown(evt -> {
DatePickerSkin skin = (DatePickerSkin) datePicker.getSkin();
Scene sc = skin.getPopupContent().getScene();
sc.setOnMouseExited(exitHandler);
});
这不是一个好的解决方案,因为它需要访问位于 com.sun
包中的皮肤,但它是一个解决方案。
我该如何设置这种行为?目前悬停(mouseEntered)很好,只要光标进入 DatePicker 就会显示 DateChooser,但是只要鼠标离开 DatePicker 它就会隐藏 DateChooser。我找不到可以访问 DateChooser 本身的方法。
仅修复了当光标移到 DatePicker 下时不关闭 DateChooser,但只要鼠标离开 DateChooser 就应该关闭。
datePicker.setOnMouseEntered((event)->{datePicker.requestFocus();datePicker.show();});
datePicker.setOnMouseExited((event)->{if(event.getY()<23)datePicker.hide();});
访问皮肤允许您访问弹出窗口的内容,这允许您访问弹出窗口的 Scene
,这允许您向该场景添加一个 onMouseExited
处理程序以隐藏弹出窗口:
EventHandler<MouseEvent> exitHandler = e -> datePicker.hide();
datePicker.setOnShown(evt -> {
DatePickerSkin skin = (DatePickerSkin) datePicker.getSkin();
Scene sc = skin.getPopupContent().getScene();
sc.setOnMouseExited(exitHandler);
});
这不是一个好的解决方案,因为它需要访问位于 com.sun
包中的皮肤,但它是一个解决方案。