私は、重要な機能がモニター解像度に基づく GUI コンポーネントの自動スケーリングである大規模なレガシー Java アプリケーションに取り組んでいます。JVM を実行する JVM を 1.4.2 から 1.6 にアップグレードしていますが、java.awt.Container.getPreferredSize() の実装が変更されたため、スケーリングが機能しなくなりました。
getPreferredSize は、setPreferredSize() で指定したものと同じオブジェクトを返すために使用されていました (すべて最小/最大サイズにも適用されます)。そのため、java.awt.Dimension の特定のサブクラスを持つすべてのスケーリング コンポーネントで setPRefferedSize を呼び出します。コンポーネント階層をたどり、解像度が変更されるたびに各スケーリング コンポーネントを更新します。
ただし、Java 1.6 では、getPreferredSize は渡した Dimension オブジェクトのコピーを返すため、正しい型ではなくなり、何もスケーリングされません。
Component クラスをクラスパスの JRE の前に配置することで独自の実装 (オープンソース JRE に感謝) でオーバーライドすることで、非常に迅速にソリューションをハックしました。ただし、このソリューションは明らかに維持できません。
Java 1.5/1.6 で GUI スケーリングをどのように実装しますか?