对于我的 Swing 项目,我需要同时支持Java 5和Java 6。我已经定义了一个自定义JComponent
(调用它Picture
),并且在将它嵌入到 a 之后JScrollPane
,我将它放入JPanel
使用 DesignGridLayout 管理器的 a 中。
得益于swing-layout开源库,DesignGridLayout 支持基线对齐(实现对 Java 5 的基线支持并提供与新的 Java 6 基线支持的兼容性)。
我的Picture
类覆盖 public int getBaseline(int width, int height)
,以便我可以为它定义一个正确的基线。请注意,“覆盖”并不完全正确:它覆盖了 Java6 上的方法,但在 Java5 中定义了它。
当我在 Java5 上运行我的示例应用程序时,一切都很好:Picture
我定义的基线被正确使用。
但是,当我使用 Java6 时,我的Picture#getBaseline()
方法不会被调用!当然,我的图片的基线对齐很糟糕(居中)。
在检查 Java6 源代码后,我看到,在 中BasicScrollPaneUI
,getBaseline()
首先调用getBaselineResizeBehavior()
视口组件(我的Picture
实例)。并且getBaseline()
只有在getBaselineResizeBehavior()
返回时才会调用Component.BaselineResizeBehavior.CONSTANT_ASCENT
。
现在我的问题是这是我无法在 Java5 中实现getBaselineResizeBehavior()
的 Java6 方法,因为它返回 Java5中不存在的枚举。JComponent
Component.BaselineResizeBehavior
所以我的问题(最后)是:我如何实现(或模拟?)getBaselineResizeBehavior()
以便我的类仍然可以在 Java5 环境中编译和运行?