JavaFX的完全定制的窗口?(JavaFX entirely customized windows

2019-06-18 12:45发布

我想有在那里我已经完全自定义窗口的外观的应用程序。 到目前为止,我已经学会了,我可以去除典型窗口的东西:

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()
  }
}

一切工作正常,但该窗口拖动,双击到最大化,拖动到屏幕上的窗口顶部边缘应积极最大化等本地窗口功能被完全丢失。

我能以某种方式而轻松地自定义整个显示窗口,而不会失去所有这些漂亮的能力。

我说的是像Adobe公司的Photoshop这看起来完全不同,但仍保留这些功能(或手动实现他们自己的用户界面的顶部)。

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

Answer 1:

看到自定义窗口的外观和处理在合奏示例应用程序 ,其包括源代码。 下载源 ,建立并运行它作为一个独立的应用程序,而不是嵌入在浏览器中。 它不会是你问什么,因为这样的东西拖动到屏幕顶部边缘激活最大化是行不通的,我认为,但它应该是非常接近,你总是可以代码自己的东西,其窗口最大化当它被拖到附近的上边缘。 合奏窗口具有的功能,如自定义调整的装饰品,最小化,最大化,关闭图标,窗口顶部的区域,你可以用它来左右或双击拖动窗口最大化或最小化的窗口 - 也就是最标准的功能,你期望从桌面窗口系统。

要得到的东西更接近你的要求,也许你可以通过创建两个窗口砍东西一起。 一,标准装修阶段窗口,其中包括屏幕边框,对方总是显示在主窗口的上部,并用自定义呈现覆盖在主窗口的边界未修饰的或透明子阶段。 我想你可能会碰到试图实现这种方法的困难,所以我真的不能推荐它。

你可能想尝试未修饰的舞台表演风格,而不是透明的,看看你得到更好本地Windows的整合。

目前定为JavaFX与JDK8,运一些开放的功能要求的Windows:支持顶级的Windows Aero Glass效果 , Mac上支持Windows NSTexturedBackgroundWindowMask风格和在一个阶段创建的纯白色的背景应该创建-如果需要, -在场景图 ,其中,实施时,可能会帮助你acheive你的目标-为他们投票,如果这样的功能对你很重要。

还结帐VFXWindows这是JavaFX的一个开源窗口框架。

更新

也关系是Undecorator项目,让您轻松地创建带有标准的最小化/最大化/关闭/调整是通过JavaFX的引擎,而不是OS窗口系统呈现铬控制一个JavaFX阶段。 这使您可以在窗口渲染达到那种自定义控件的像合奏显示的应用程序。



Answer 2:

你可以使用这个库。 这是一个完全定制了JavaFx阶段(CustomStage)。 你可以看到在细节如何在这个使用说明CustomStage百科

它有,

  • 窗口大小调整
  • 默认情况下,操作按钮和他们的行为(关闭,最大化/还原,最小化)
  • 窗口中拖动
  • 窗口会自动缩放为屏幕分辨率
  • 非常敏感
  • 风格化(通过CSS和方法)
  • 可以实现透明
  • 有内置的导航窗格和抽屉
  • 等等


文章来源: JavaFX entirely customized windows?