JavaFX完全定制windows?

2023-11-21

我想要一个完全自定义窗口外观的应用程序。到目前为止,我已经了解到可以使用以下方法删除典型的窗口内容:

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 功能完全缺失。

我可以以某种方式相当轻松地自定义窗口的整个外观,而不会失去所有这些不错的功能吗?

我说的是像 Adob​​e Photoshop 这样的东西,它看起来完全不同,但仍然保留了这些功能(或者在 UI 上手动实现它们)。

如果我至少能为初学者实现拖动+窗口按钮,这将是一个开始。我这里的目标是 Linux、Mac 和 Windows。


请参阅自定义窗口外观和处理合奏示例应用程序,其中包括源代码。下载source,将其构建并作为独立应用程序运行,而不是嵌入到浏览器中。它不会完全符合您的要求,因为我认为拖动到屏幕顶部边缘以激活最大化之类的东西不会起作用,但它应该非常接近,您总是可以自己编写一些最大化窗口的代码当它被拖动到顶部边缘附近时。 Ensemble 窗口具有自定义调整大小装饰、最小化、最大化、关闭图标等功能,窗口顶部的一个区域可用于拖动窗口或双击以最大化或最小化窗口 - 即您可以使用的大多数标准功能。期望来自桌面窗口系统。

为了得到更接近你所要求的东西,也许你可以通过创建两个窗口来将一些东西组合在一起。一个是包含屏幕边框的标准装饰舞台窗口,另一个是未装饰或透明的子舞台,始终显示在主窗口顶部,并使用自定义渲染覆盖主窗口的边框。我认为您在尝试实施这种方法时可能会遇到困难,所以我不会真正推荐它。

您可能想尝试 UNDECORATED 舞台风格而不是 TRANSPARENT,看看您是否能获得更好的本机 Windows 集成。

当前计划将 JavaFX 与 JDK8 一起提供一些开放的功能请求,Windows:支持顶级窗口的 Aero Glass 效果, Mac:支持 Windows 的 NSTexturedBackgroundWindowMask 样式 and 如果需要,应在场景图中创建在舞台中创建的纯白色背景,一旦实施,可能会帮助您实现您的目标 - 投票给他们,如果这些功能对您很重要。

Ensemble Sample Application

还结帐视觉特效视窗这是 JavaFX 的开源窗口框架。

Update

同样相关的是取消装饰器项目,它允许您轻松创建一个带有标准最小化/最大化/关闭/调整大小镶边控件的 JavaFX 阶段,这些控件是通过 JavaFX 引擎而不是操作系统窗口系统呈现的。这允许您实现对像 Ensemble 这样的应用程序显示的窗口渲染的自定义控制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaFX完全定制windows? 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Scala 解析器组合器的运算符优先级

    我正在研究需要考虑运算符优先级的解析逻辑 我的需求并不太复杂 首先 我需要乘法和除法比加法和减法具有更高的优先级 例如 1 2 3 应视为 1 2 3 这是一个简单的例子 但你明白了 我需要将更多自定义标记添加到优先级逻辑中 我可以根据此处
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 分析 sbt 构建

    我的 sbt 构建需要很长时间 它又大又复杂 很难知道从哪里开始清理 看起来 sbt 保留了很多关于构建结构的元数据 包括相互依赖关系 命名任务 范围界定等 有了所有这些元数据 似乎很容易跳入并测量每个不同任务 及其范围 花费的时间 在代码
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • QComboBox点击事件

    我一直在努力得到一个QComboBox在 PyQt5 中从数据库表填充 问题是试图找到一种识别其点击事件的方法 在我的 GUI 中 我的组合框最初是空的 但是单击它后 我希望单击事件激活我的方法 以与数据库通信并填充下拉列表 到目前为止 似
  • Javascript 函数仅在有警报时才起作用

    这段代码执行post php function SubmitForm var input input val var user anon post post php input input user user function data a
  • 如何在CSS中创建不规则的正方形? [复制]

    这个问题在这里已经有答案了 正在寻找用 CSS 制作这个特定形状的代码 非常感谢任何帮助 您可以通过一些旋转和视角来做到这一点 box width 150px height 120px background f540a8 margin 20
  • NSMetadataQuery 忽略自定义文件包类型

    我在用着UIManagedDocument管理我在 iCloud 中的文件 设置完后NSMetadataQuery像这样 iCloudQuery NSMetadataQuery alloc init iCloudQuery setSearc
  • 如何检查用户是否将“input”或“raw_input”提示留空?

    如何检查输入是否已输入 例如 python2 x str raw input Message gt gt 或者 python3 y input Number gt gt 你知道如果第二个没有输入任何内容 因为它会引发SyntaxError
  • Angularjs - 处理整个应用程序的 401

    我的一个控制器中有以下代码来优雅地处理 401 ChannelsService query function response scope channels response function error if error status 4
  • iOS 5 NSURL连接到HTTPS服务器

    我已经搜索了几个小时有关NSURLConnection允许我用来连接到任何 HTTPS 服务器的委托 方法 即使我在这个网站上搜索 我也找到了答案 但这些答案对我不起作用 如果你们需要的话 我会上传代码链接 但我更喜欢一个简单的教程 示例代
  • 改变WPF按钮的形状而不改变其他样式

    我想将 WPF 按钮的形状从默认的圆角矩形更改为其他形状 例如箭头 但我想保留其余的样式 填充颜色 边框颜色 悬停状态等 希望按钮与所有其他常规按钮具有相同的样式 我相信这取决于 Windows 版本 系统主题颜色等 所以我不能从头开始重新
  • 当作为带有接口约束的泛型参数传递时,值类型是否被装箱?

    As a result of doing the research to answer this question I think I have determined that the answer is no However I had
  • 为什么十六进制颜色值中有一个前导“#FF”?

    我在用着表达混合3 并手动编写一些 XAML 特别是控件的颜色值 我有一个已转换为十六进制的 RGB 颜色列表 我只需要将十六进制值插入到我的 XAML 中 最初 我将电子邮件中的十六进制值粘贴到适当的属性中 在我完成之前 Blend 开始
  • 绑定到 Xamarin Forms 中的附加属性

    如何绑定到 Xamarin Forms XAML 中的附加属性 这不起作用 但它可以编译并且最有意义 BindingContext x Binding Source x Reference ControlName Path XMLNameS
  • Zend 框架清除缓存

    我正在使用此代码在 zend 框架中缓存数组 frontendOptions array lifetime gt 24 3600 7 cache lifetime of 7 day automatic serialization gt tr
  • 绘制对数分类网络度分布

    我经常遇到并从复杂网络中制作长尾度分布 直方图 如下图所示 从许多观察来看 它们使这些尾巴的末端很重 非常重和拥挤 然而 我读过的许多出版物都有更清晰的度分布 在分布末尾没有这种聚集 并且观察结果的间隔更均匀 如何使用以下方法制作这样的图表
  • Topshelf 窗口服务在尝试启动服务时出现错误 1053

    我使用 Topshelf 开发了一个 Windows 服务 它在本地运行良好 当我部署测试并尝试启动服务时 出现以下错误 Error 1053 The service did not respond to the start or cont
  • Bash:循环遍历名称中包含模式的变量

    在我的脚本中 我有未知数量的包含角度的变量 我想将它们转换为向量 我创建了变量名称 使每个 参数 的角度具有以下形式 参数 角度 纬度 纬度 因此 每个参数都有一个 lat 和 perp 角度变量 所以我想做的是找到包含 angle lat
  • 如何在C++中获取动态数组的大小[重复]

    这个问题在这里已经有答案了 通过输入大小并将其存储到 n 变量中来编写动态数组的代码 但我想从模板方法获取数组长度而不是使用 n int a NULL Pointer to int initialize to nothing int n S
  • ASP.Net:在 Page_Load 中调用异步方法

    我有一个 API 客户端 它有一个发送方法 用于将我的对象发布到 Web API 服务并返回 ReturnedResults 类型的对象 现在我需要在 ASP net page load 事件中运行此 post 方法 我在这里看到了类似的示
  • 保护图片下载

    我知道保护图像下载的最佳方法首先就是不要将其放在互联网上 我认为没有 100 的防止图像下载的保护 如果用户可以在互联网上看到图像 他可以通过一些经验找到下载它的权限 我知道透明 gif or png覆盖图像或使用background im
  • 为什么macos(x86)可以运行docker arm容器arm64v8/alpine?

    我碰巧发现我的macos x86 可以为arm镜像arm64v8 alpine运行docker容器 但有以下警告 docker run it arm64v8 alpine uname a WARNING The requested imag
  • JavaFX完全定制windows?

    我想要一个完全自定义窗口外观的应用程序 到目前为止 我已经了解到可以使用以下方法删除典型的窗口内容 class Application extends javafx application Application Starts the ap