如何解决Pane.setConstraints()方法的隐形问题

时间:2017-08-04 21:28:02

标签: java javafx layout

我正在使用JavaFX创建一个GUI,我发现没有一个提供的布局管理器满足我的需求,所以我正在创建自己的。我查看了一些内置布局管理器的代码,其中很多使用了他们所谓的 constraints :可以应用于布局窗格的子窗口的属性,这将是影响它们的布局。

实际上,这正是它们的实现方式:底层Node类附带ObservableMap属性,设置约束设置其中一些属性。

问题在于,中间人方法Pane.setConstraints()javafx.scene.layout是私有的,所以我不能在我的包中使用它。对我来说,从API中排除这个有用的功能似乎很奇怪。

我目前看到的最佳工作是直接使用Node.setProperties()方法,基本上复制了Pane.setConstraints()的功能。是否有不同的解决方法可以让我重用Pane.setConstraints()方法中的代码?

Pane.setConstraints()是10行代码,为了使我的实现尽可能健壮,我基本上需要将这10行复制并粘贴到我自己的代码中,以便复制功能。 / p>

1 个答案:

答案 0 :(得分:2)

我认为您已经有了正确的解决方案(将代码复制并粘贴到您的课程中)。

我认为JavaFX开发人员希望保持最低限度的API,从安全角度来看,这些API功能实用且易于维护。因此,有时会有一些有用的功能被隐藏起来。在JavaFX私有实现中,应用程序开发人员无法轻松访问(即使功能可能有用)。它是可维护性和功能性之间的权衡。

有时您可以使用反射解决可访问性问题以打破封装。通常,不推荐这样做,因为这样的代码可能会破坏未来的Java版本,因为您调用的代码不是公共支持的API的一部分,并且缺少公共API提供的向后兼容编译保证。

您始终可以发出请求或提供补丁请求以使某些功能可用(enter image description here可能是启动此过程的最佳方式。)

过去,某些JavaFX版本中以前私有的重要功能已在后续版本的公共API中发布(例如openjfx-dev mailing list)。