【问题标题】:JavaFX Multiple Scenes vs StackPane: What is Standard?JavaFX 多场景与​​ StackPane:什么是标准?
【发布时间】:2017-03-14 03:37:21
【问题描述】:

我已经阅读了一些关于 JavaFX 中的 Scenes vs Panes / StackPanes 的内容。我只是很难确定是否有“行业标准”。首先,我想从登录 -> 仪表板 -> 其他“屏幕”。关于场景与堆栈窗格,是否有首选/标准?我理解这个问题是否因为“基于意见”而被关闭,但我在技术上并不是在寻找意见;我正在寻找构建 JavaFX 应用程序的标准。

【问题讨论】:

  • 没有这样的标准。但总的来说,我认为只有在需要更改场景维护的方面(相机、深度缓冲、抗锯齿等)时,才真正有意义地更改场景。如果这些都将被修复,请保持相同的场景并更改场景的根。如果您可以保持所有视图都加载,您还可以考虑使用these lines 的解决方案(基本上您正在实现一个没有选项卡的选项卡窗格)。

标签: java javafx


【解决方案1】:

AFAIK 没有来自 JavaFX 核心的标准,也没有任何相关的指导方针。

在 Swing 时代,我们曾经依靠 CardPane 来实现所需的行为。遗憾的是,JavaFX 核心并没有提供这种开箱即用的容器/组件。可以基于StackPane 编写一个类似的容器(诀窍是确保后面层中的子节点不可见)。

您提到的切换场景似乎也是一个流行的选择,尽管我更喜欢更改 scene 的根而不是完全切换整个事物。

最后,构建中型到大型 JavaFX 应用程序很可能需要某种应用程序框架。除了Application 类提供的非常基本的应用程序生命周期之外,JavaFX 核心在这方面也没有提供任何支持。我的建议是查看https://github.com/mhrimaz/AwesomeJavaFX#frameworks 并根据您的具体要求评估这些选项。我有偏见,但我建议你看看http://griffon-framework.org/。平心而论,Griffon 并没有强制执行可以回答您问题的特定策略,但最近添加的 JavaFX 支持应该可以更轻松地实现CardPane。也许这就是我们将为下一个版本做的事情:-)

【讨论】:

  • 不是CardPane 只是一个TabPane 没有标签实际上是可见的吗?因此,只需使用带有(相当简单的)自定义皮肤的TabPane,所有这些都可以非常简单地完成。然后您就可以免费获得各种有用的选择模型功能。
  • 有跑题的风险,@James_D 你是对的,可以使用TabPane 来实现CardPane 但是你必须直接扩展TabPane 从而继承它的行为,其中一些不是可取的(在“CardPane”上插入“Tab”?)。另一种方法是扩展Region 并组成TabPane,但随后需要转发大小和其他属性。此时从StackPane 扩展看起来更有吸引力。这表明在 JavaFX 中创建自定义容器并不能提供当前 API 的优雅体验:-/
  • 为了记录,曾经尝试使用 Pagination 子类来创建 CardPane 但由于私有原因无法改变鼠标/键侦听器的内部行为,整个实验严重崩溃API(行为类和朋友)。
  • 该功能实际上几乎是您想要的(在可以显示的事物列表中添加一个新事物),尽管我同意事物的名称(“选项卡”)失去了它们的语义含义。在这种特殊情况下,这很容易做到——我什至不必继承TabPane;只需插入一个新皮肤。请参阅this 了解类似的内容(实际上更复杂)。
  • 确实需要更多的自定义设置,而 github.com/Haixing-Hu/javafx-widgets/blob/master/src/main/java/… 需要的自定义更少:-)
【解决方案2】:

我认为这实际上取决于您的应用程序的性质。即,它是根据您的活动更改内容的单个可见窗口(例如,可以更改模式的 Windows 计算器之类的东西),还是带有选项卡式窗格的类似编辑器的主窗口,还是像图像编辑器这样的“工具”应用程序具有主视图和单独的子窗格。

对于您的用例,我只需切换主场景对象的根节点属性。因此,您将拥有一个“仪表板”根节点,当您单击/选择仪表板上的某些内容时,您只需使用要显示的新节点更新根节点属性。

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2016-09-03
    • 2022-01-22
    相关资源
    最近更新 更多