如何在JavaFX中创建一个可移动/可拖动的未修饰窗口?

Shr*_*ave 15 minimize maximize javafx-2

我必须创建一个应用程序,其中最小化和最大化按钮将被禁用.

我已经习惯"StageStyle.UNDECORATED"了应用程序不再可移动或可拖动,所以我正在寻找任何其他替代方案来进行我的应用程序.

有没有人有这方面的解决方案?

pmo*_*ule 25

要实现未装饰但仍可移动/可拖动的窗口,您必须MouseEvent在您选择的任何节点上处理相应的窗口.

例:

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class SimpleWindowApplication extends Application {
    private double xOffset = 0;
    private double yOffset = 0;

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

    @Override
    public void start(final Stage primaryStage) {
        primaryStage.initStyle(StageStyle.UNDECORATED);
        BorderPane root = new BorderPane();

        root.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                xOffset = event.getSceneX();
                yOffset = event.getSceneY();
            }
        });
        root.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                primaryStage.setX(event.getScreenX() - xOffset);
                primaryStage.setY(event.getScreenY() - yOffset);
            }
        });

        Scene scene = new Scene(root, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

从Oracle JavaFX下载页面中包含的非常有价值的示例中了解更多信息:JavaFX演示和示例