我想要一个完全自定义窗口外观的应用程序。到目前为止,我已经了解到可以使用以下方法删除典型的窗口内容:
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 上的屏幕顶部边缘应激活最大化等。本机 Window 功能完全缺失。
我可以以某种方式相当轻松地自定义窗口的整个外观,而不会失去所有这些不错的功能吗?
我说的是像 Adobe Photoshop 这样的东西,它看起来完全不同,但仍然保留了这些功能(或者在 UI 上手动实现它们)。
如果我至少能为初学者实现拖动+窗口按钮,这将是一个开始。我这里的目标是 Linux、Mac 和 Windows。
请参阅自定义窗口外观和处理合奏示例应用程序,其中包括源代码。下载source,将其构建并作为独立应用程序运行,而不是嵌入到浏览器中。它不会完全符合您的要求,因为我认为拖动到屏幕顶部边缘以激活最大化之类的东西不会起作用,但它应该非常接近,您总是可以自己编写一些最大化窗口的代码当它被拖动到顶部边缘附近时。 Ensemble 窗口具有自定义调整大小装饰、最小化、最大化、关闭图标等功能,窗口顶部的一个区域可用于拖动窗口或双击以最大化或最小化窗口 - 即您可以使用的大多数标准功能。期望来自桌面窗口系统。
为了得到更接近你所要求的东西,也许你可以通过创建两个窗口来将一些东西组合在一起。一个是包含屏幕边框的标准装饰舞台窗口,另一个是未装饰或透明的子舞台,始终显示在主窗口顶部,并使用自定义渲染覆盖主窗口的边框。我认为您在尝试实施这种方法时可能会遇到困难,所以我不会真正推荐它。
您可能想尝试 UNDECORATED 舞台风格而不是 TRANSPARENT,看看您是否能获得更好的本机 Windows 集成。
当前计划将 JavaFX 与 JDK8 一起提供一些开放的功能请求,Windows:支持顶级窗口的 Aero Glass 效果, Mac:支持 Windows 的 NSTexturedBackgroundWindowMask 样式 and 如果需要,应在场景图中创建在舞台中创建的纯白色背景,一旦实施,可能会帮助您实现您的目标 - 投票给他们,如果这些功能对您很重要。
还结帐视觉特效视窗这是 JavaFX 的开源窗口框架。
Update
同样相关的是取消装饰器项目,它允许您轻松创建一个带有标准最小化/最大化/关闭/调整大小镶边控件的 JavaFX 阶段,这些控件是通过 JavaFX 引擎而不是操作系统窗口系统呈现的。这允许您实现对像 Ensemble 这样的应用程序显示的窗口渲染的自定义控制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)