我正在使用JavaFX创建一个GUI,我发现没有一个提供的布局管理器满足我的需求,所以我正在创建自己的。我查看了一些内置布局管理器的代码,其中很多使用了他们所谓的 constraints :可以应用于布局窗格的子窗口的属性,这将是影响它们的布局。
实际上,这正是它们的实现方式:底层Node
类附带ObservableMap
属性,设置约束设置其中一些属性。
问题在于,中间人方法Pane.setConstraints()
对javafx.scene.layout
是私有的,所以我不能在我的包中使用它。对我来说,从API中排除这个有用的功能似乎很奇怪。
我目前看到的最佳工作是直接使用Node.setProperties()
方法,基本上复制了Pane.setConstraints()
的功能。是否有不同的解决方法可以让我重用Pane.setConstraints()
方法中的代码?
Pane.setConstraints()
是10行代码,为了使我的实现尽可能健壮,我基本上需要将这10行复制并粘贴到我自己的代码中,以便复制功能。 / p>
答案 0 :(得分:2)
我认为您已经有了正确的解决方案(将代码复制并粘贴到您的课程中)。
我认为JavaFX开发人员希望保持最低限度的API,从安全角度来看,这些API功能实用且易于维护。因此,有时会有一些有用的功能被隐藏起来。在JavaFX私有实现中,应用程序开发人员无法轻松访问(即使功能可能有用)。它是可维护性和功能性之间的权衡。
有时您可以使用反射解决可访问性问题以打破封装。通常,不推荐这样做,因为这样的代码可能会破坏未来的Java版本,因为您调用的代码不是公共支持的API的一部分,并且缺少公共API提供的向后兼容编译保证。
您始终可以发出请求或提供补丁请求以使某些功能可用(可能是启动此过程的最佳方式。)
过去,某些JavaFX版本中以前私有的重要功能已在后续版本的公共API中发布(例如openjfx-dev mailing list)。