私の Swing プロジェクトでは、Java 5とJava 6の両方をサポートする必要があります。カスタムを定義しJComponent
( と呼びますPicture
)、 に埋め込んだ後、DesignGridLayout マネージャーを使用するJScrollPane
に配置しました。JPanel
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
今私の問題は、Java5に存在しない列挙型を返すため、Java5に実装できないgetBaselineResizeBehavior()
Java6メソッドであることです。JComponent
Component.BaselineResizeBehavior
getBaselineResizeBehavior()
だから私の質問は(最後に)次のとおりです。クラスをJava5環境でコンパイルして実行できるようにするには、どうすれば実装(またはシミュレート?)できますか?