【问题标题】:OpenJFX TreeTableView rendering issueOpenJFX TreeTableView 渲染问题
【发布时间】:2021-03-13 00:11:01
【问题描述】:

我希望有其他开发人员有类似的问题,可以分享如何解决这个问题。我正在我的一个宠物项目中使用 OpenJFX。该项目在包含 JFX 包的 Oracle JDK 1.8 上进行了测试。在 Oracle 1.8 JDK 上运行时,TreeTableView 完全按照要求显示:

由于我的其他工作站需要 Java 11,因此下载并安装了 OpenJFX 二进制文件 here。但是 TreeTableView 变得不可读,如下所示:

有没有类似经历的JFX开发者?

仅供参考,我已经使用 OpenJFX 版本 11.0.2、15.0.1 和 16 进行了测试,所有版本都提供了相同的输出。

编辑:似乎从源代码行为是从源代码编译产生相同的结果。

更新:我应该添加我的宠物项目正在使用 JRuby 和 JRubyFX。虽然不确定我认为它与 JRubyFX 无关,因为 Oracle FX 似乎很好。

谢谢!

问候

【问题讨论】:

  • 你能提供一个minimal reproducible example吗?
  • 嗨,最快的是使用我的宠物项目,它是一个 jruby gems gvcsfx。如果你在 jruby 环境下,只需执行$ gem install gvcsfx。成功安装后,您可以通过键入$ gvcsfx 来启动gvcsfx GUI。该命令应打开窗口,如上面所附的屏幕截图。如果程序运行时Java是Oracle JDK,它将使用Oracle JFX。如果程序运行时 Java 是 OpenJDK,它将使用 OpenJFX,方法是查找指向 OpenJFX 版本的环境变量 PATH_TO_FX。通过这种方式可以显示差异。
  • 事情是,我感觉我以前遇到过这个问题,但我不记得具体了。这可能与使用图形有关。具体来说,在TreeItem 而不是TreeCell / TreeTableCell 中配置图形似乎是个问题(在我看来,给TreeItem 一个图形属性是一个糟糕的API 决定)。但话虽如此,您的应用程序中似乎没有使用任何图形,所以我不知道我所说的任何内容是否会有所帮助。
  • 我相信我只有在设置 TreeItem#graphic 属性时才遇到问题。但是如果你设置text 而不是单元格的graphic 会发生什么呢?顺便说一句,您为什么将graphic 属性设置为Text 节点,而不是直接设置text 属性?
  • 我添加了一个社区答案。

标签: jruby openjfx treetableview jrubyfx


【解决方案1】:

从您的存储库中,您拥有:

class WorkspaceCellFactory < javafx.scene.control.TreeTableCell
  include Antrapol::ToolRack::ExceptionUtils
  def updateItem(itm,e)
    super

    cont = nil
    if not itm.nil? 
      if itm.is_a?(TreeWorkspace) 
        if not_empty?(itm.workspace)
          cont = itm.workspace.path
        elsif not_empty?(itm.project)
          cont = itm.project
        else
          cont = itm
        end
      else
        cont = itm
      end
    end

    setGraphic(Text.new(cont))

  end
end

您将 graphic 属性设置为 javafx.scene.text.Text 节点。过去,我相信我在使用带有 TreeView / TreeTableView 的图形时遇到过类似的问题。您已确认替换:

setGraphic(Text.new(cont))

与:

setText(cont)

解决问题。


JavaFX 中的错误

这似乎是 JavaFX 中的一个错误。请submit a bug report,假设一个不存在,以便开发人员知道存在问题并可以修复它。错误报告应包含用 Java 编写的 minimal reproducible example

【讨论】:

  • 感谢@Slaw 的回答!但是,错误报告链接链接到 Oracle 错误系统。这是 JavaFX 本身的错误还是实现的错误?听起来 Oracle 的行为确实如此,但 OpenJFX 的行为不同。我应该改为向 OpenJFX 报告吗?
  • 我提供的链接会将错误提交给 JBS(Java Bug System)。这是您报告 OpenJFX(和 OpenJDK 等)的错误的地方。创建报告时,您将为“组件”选择“JavaFX”。您还可以在提供的框中包含更多运行时信息。 @克里斯
  • 我认为该问题已报告给错误数据库here。虽然问题被标记为已关闭,但评论似乎将问题链接到another issue,该问题仍处于打开状态。我猜他们当时正在努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 2010-10-19
  • 2016-06-27
  • 2010-11-29
  • 2011-11-24
  • 2016-04-21
  • 2016-07-06
相关资源
最近更新 更多