Перетаскивание окна JavaFX по нажатию на область

Как отследить нажатие на конкретную область окна в JavaFX и после этого сделать возможность перетаскивания окна, используя только эту область?

У меня уже есть работающий код, но в нем перетаскивание окна происходит при нажатии на любую область окна. Я пытаюсь добиться работы программы, при которой перетаскивать окно можно будет только используя "Особую область". Использована часть кода из этого вопроса и за основу взят код из данных статей.

Полностью аналогичный вопрос уже задавался на stackoverflow, но для Python библиотеки PyQt5.

Скриншот запущенного приложения: Скриншот запущенной программы

Мой код Main.java:

package me.vikkt.secondfx;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.io.IOException;
import java.io.InputStream;
import java.util.Objects;


public class Main extends Application {
    private double xOffset;
    private double yOffset;
    @Override
    public void start(Stage stage) throws IOException {
        String fxmlFile = "/mainScene.fxml";
        //InputStream iconStream = Objects.requireNonNull(getClass().getResourceAsStream("/icon.png"));

        FXMLLoader loader = new FXMLLoader();
        Parent root = loader.load(getClass().getResourceAsStream(fxmlFile));
        Scene scene = getScene(stage, root);

        //Image image = new Image(iconStream);
        //stage.getIcons().add(image);
        stage.setTitle("Забавное окно");
        stage.initStyle(StageStyle.TRANSPARENT);
        stage.setScene(scene);

        stage.show();
    }

    private Scene getScene(Stage stage, Parent root) {
        Scene scene = new Scene(root, Color.TRANSPARENT);
        scene.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                xOffset = stage.getX() - event.getScreenX();
                yOffset = stage.getY() - event.getScreenY();
            }
        });
        scene.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                stage.setX(event.getScreenX() + xOffset);
                stage.setY(event.getScreenY() + yOffset);
            }
        });
        return scene;
    }

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

Файл mainScene.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.text.Font?>

<Pane maxHeight="-Infinity"
      maxWidth="-Infinity"
      minHeight="-Infinity"
      minWidth="-Infinity"
      prefHeight="400.0"
      prefWidth="600.0"
      style="-fx-background-radius: 20;"
      xmlns="http://javafx.com/javafx/21">
   <Pane layoutX="14.0" layoutY="14.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="42.0" prefWidth="574.0" style="-fx-background-color: #445533;">
      <children>
         <Label layoutX="14.0" prefHeight="43.0" prefWidth="505.0" text="Особая область">
            <font>
               <Font size="27.0" />
            </font>
         </Label>
      </children>
   </Pane>
   <Label layoutX="14.0" layoutY="89.0" prefHeight="43.0" prefWidth="505.0" text="Обычная область">
      <font>
         <Font size="27.0" />
      </font>
   </Label>
</Pane>

P.S. Я впервые на stackoverflow и это моё первое JavaFX приложение. Заранее извиняюсь за огрехи в коде и неточности в вопросе. С радостью выслушаю предложения по исправлению кода, если что-то не так.


Ответы (0 шт):