Для моего проекта Swing мне необходимо поддерживать Java 5 и Java 6 .
Я определил пользовательский JComponent
(назовите его Picture
) и после встраивания его в JScrollPane
я поместил его в JPanel
, который использует менеджер DesignGridLayout.
DesignGridLayout поддерживает выравнивание базовой линии благодаря swing-layout библиотеке с открытым исходным кодом (реализует базовую поддержку Java 5 и обеспечивает совместимость с новой базовой поддержкой Java 6).
Мой Picture
класс переопределяет public int getBaseline(int width, int height)
, чтобы я мог определить для него правильную базовую линию. Обратите внимание, что « override » не совсем корректно: он переопределяет метод в Java6, но определяет его в Java5.
Когда я запускаю пример приложения на Java5, все в порядке : правильно определенная базовая линия Picture
.
Однако, , когда я использую Java6 , мой Picture#getBaseline()
метод не вызывается! И, конечно, базовое выравнивание моей картины ужасно (по центру).
После проверки в исходном коде Java6 я увидел, что в BasicScrollPaneUI
, getBaseline()
вызывает сначала getBaselineResizeBehavior()
для компонента области просмотра (мой экземпляр Picture
).
И он будет вызывать getBaseline()
, только если getBaselineResizeBehavior()
вернет Component.BaselineResizeBehavior.CONSTANT_ASCENT
.
Теперь моя проблема в том, что getBaselineResizeBehavior()
- это метод Java6 JComponent
, который я не могу реализовать в Java5, потому что он возвращает перечисление Component.BaselineResizeBehavior
, которого нет в Java5.
Итак, мой вопрос (наконец-то): как я могу реализовать (или симулировать?) getBaselineResizeBehavior()
, чтобы мой класс все еще мог компилироваться и работать в среде Java5?