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

问题描述 投票:13回答:2

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

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

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

javafx-2 minimize maximize
2个回答
23
投票

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

例:

MouseEvent

从Oracle JavaFX下载页面中包含的非常有价值的示例中了解更多信息: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(); } }


0
投票

这个类的唯一目的是允许拖动未修饰的Window。它还执行以确保TaskBar在FullScreen中保持可见的任务,并确保未将未修饰的窗口拖出屏幕。最后,它提供了错误修复“css资源未找到”。只需在舞台显示为关闭时或之后显示时,只需在重写的start()方法中将主代码中的代码粘贴到下面。

JavaFX Demos and Samples

注意:当舞台处于关闭准备状态时或之后,粘贴上面的内容。对于全屏窗口使用:

WindowStyle.allowDrag(root, stage);
WindowStyle.stageDimension(stage.getWidth(), stage.getHeight());

要重新调整以前的用法:

WindowStyle.fullScreen(Stage stage);

要在场景中添加自定义样式表,请在定义场景后,在重写的start()方法中将主题类中的代码粘贴到下面。

WindowStyle.restoreScreen(Stage stage);

用于样式的css名称可以采用以下形式:scene.getStylesheets().add(WindowStyle.addStyleSheet(String css)); main.css

styles/main.css
© www.soinside.com 2019 - 2024. All rights reserved.