对于我的 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中不存在的枚举。JComponentComponent.BaselineResizeBehavior
所以我的问题(最后)是:我如何实现(或模拟?)getBaselineResizeBehavior()以便我的类仍然可以在 Java5 环境中编译和运行?