Существует множество учебных пособий или вопросов, связанных с пользовательской строкой заголовка с помощью JavaFX
. Я создал пользовательскую строку заголовка следующим образом:
Я могу перемещать окна, но теперь (потому что окна UNDECORATED
Я не могу применить любую встроенную функцию Windows, такую как Aero shake
(если вы потрясете окно, все другие приложения будут уменьшены)
Есть ли какое-либо решение для управления этим типом функции с помощью настраиваемой строки заголовка?
Вот мой код:
start.java:
@Override
public void start(Stage primaryStage) throws Exception{
setPrimaryStage(primaryStage);
prStage = primaryStage;
Parent root = FXMLLoader.load(getClass().getResource("../gui/main.fxml"));
prStage.initStyle(StageStyle.UNDECORATED);
//prStage.setOpacity(0.75);
Scene scene = new Scene(root, 640, 360);
prStage.setScene(scene);
prStage.getIcons().add(new Image("/resource/Images/icon.png"));
scene.getStylesheets().add(getClass().getResource("..//gui/css/NewUICSS.css").toExternalForm());
prStage.show();
}
основной контроллер:
public class NewUIController {
private static double xOffset = 0;
private static double yOffset = 0;
public void initialize() {
moveBar.setOnMousePressed(this::mousePressed);
moveBar.setOnMouseDragged(this::mouseDrag);
moveBar.setOnMouseReleased(this::mouseRealease);
mnuBar.setOnMousePressed(this::mousePressed);
mnuBar.setOnMouseDragged(this::mouseDrag);
mnuBar.setOnMouseReleased(this::mouseRealease);
}
private void mouseDrag(MouseEvent event){
MainJavaFx.getPrimaryStage().setX(event.getScreenX() - xOffset);
MainJavaFx.getPrimaryStage().setY(event.getScreenY() - yOffset);
}
private void mouseRealease(MouseEvent event){
if(event.getSceneY() == 0){
MainJavaFx.getPrimaryStage().setY(0);
}else if(MainJavaFx.getPrimaryStage().getY() < 0){
MainJavaFx.getPrimaryStage().setY(0);
}
}
private void mousePressed(MouseEvent event){
xOffset = event.getSceneX();
yOffset = event.getSceneY();
}
public void close(){
((Stage)pnPrincipal.getScene().getWindow()).close();
}
}