JavaFX完全自定义的Windows?

我想有一个应用程序,我完全自定义窗口的外观。 到目前为止,我已经知道,我可以删除典型的窗口的东西:

class Application extends javafx.application.Application { /** * Starts the application. * * @param stage */ override def start(stage: Stage) { stage.initStyle(StageStyle.TRANSPARENT) // Load the main window view. val loader = new FXMLLoader() loader.setLocation(getClass.getResource("/com/myproj/application/MainWindow.fxml")) val root = loader.load().asInstanceOf[Parent] val scene: Scene = new Scene(root, Color.TRANSPARENT) stage.setScene(scene) stage.show() } } 

其他一切正常,除了窗口拖动,双击到最大化,在Windows上拖动到屏幕上边缘应该主动最大化等。本地窗口function完全丢失。

我可以以某种方式轻松地定制整个窗口的显示,而不会失去所有这些好的function。

我正在谈论的东西像Adobe Photoshop,看起来完全不同,但仍然保留这些function(或手动实现他们的UI上)。

这将是一个开始,如果我可以至less实现拖动+窗口button的初学者。 我在这里瞄准Linux,Mac和Windows。

请参阅Ensemble Sample应用程序中的自定义窗口外观和处理,其中包括源代码。 下载源代码 , 编译并作为独立应用程序运行,而不是embedded到浏览器中。 这不会是正是你所要求的,因为像拖动屏幕顶部激活最大化的东西是不会工作,我认为,但它应该是非常接近,你总是可以自己编码的东西,最大化窗口当它被拖到靠近顶部的边缘。 Ensemble窗口具有像自定义resize装饰,最小化,最大化,closures图标等function,您可以使用窗口顶部的区域拖动窗口或双击以最大化或最小化窗口 – 即大多数标准function期望从桌面窗口系统。

为了更接近你所要求的东西,也许你可以通过创build两个窗口来一起破解一些东西。 一个是包含屏幕边框的标准装饰舞台窗口,另一个是未装饰或透明的小孩舞台,总是显示在主窗口的顶部,并用自定义渲染覆盖主窗口的边框。 我想你可能会遇到困难,试图实施这种方法,所以我不会推荐它。

你可能想尝试一下UNDECORATED舞台风格而不是TRANSPARENT,看看你是否能够更好地与Windows进行本地整合。

目前有一些JavaFX的打开function要求与JDK8一起发布, Windows:支持用于顶层窗口的Aero Glass特效 , Mac:支持用于Windows的NSTexturedBackgroundWindowMask样式以及在舞台中创build的纯白色背景应该被创build – 如果需要的话- 在场景图中 ,如果这些function对你很重要的话,这些function在实施的时候可能会帮助你实现你的目标 – 为他们投票。

合奏示例应用程序

还检出VFXWindows ,它是JavaFX的开源窗口框架。

更新

Undecorator项目也是相关的,它允许您轻松创build一个JavaFX阶段,通过JavaFX引擎而不是OS窗口系统呈现标准的最小化/最大化/closures/resize的chrome控件。 这使您可以对像Ensemble这样的应用程序显示的窗口渲染实现自定义控件。