I'm working on a large legacy java application for which an important feature was automatic scaling of GUI Components based on monitor resolution. We are upgrading the JVM on which it runs from 1.4.2 to 1.6 and now the scaling is broken due to a change in the implementation of java.awt.Container.getPreferredSize().
getPrefferedSize used to return the same object that you gave with setPreferredSize() (everything also goes for min/max size), so what we would do is call setPRefferedSize on every scaling component with a particular subclass of java.awt.Dimension, then we would walk the component hierarchy and update each scaling component whenever the resolution changed.
However in Java 1.6 getPreferredSize returns a copy of the Dimension object you passed it, so it is no longer the right type and nothing gets scaled.
I hacked together a solution pretty quick by overriding the Component class with my own implementation (thank you open source JRE) by placing it in front of the JRE on the class path. However this solution is clearly not maintainable.
Does anyone else know any other solution to this problem, how would you implement GUI scaling in java 1.5/1.6?