我正在开发一个大型遗留 Java 应用程序,该应用程序的一个重要功能是基于监视器分辨率自动缩放 GUI 组件。我们正在将运行它的 JVM 从 1.4.2 升级到 1.6,但由于 java.awt.Container.getPreferredSize() 的实现发生了变化,现在缩放被破坏了。
getPreferredSize 用于返回您使用 setPreferredSize() 提供的相同对象(一切也适用于最小/最大尺寸),所以我们要做的是在每个具有特定子类 java.awt.Dimension 的缩放组件上调用 setPRefferedSize,然后我们将遍历组件层次结构并在分辨率更改时更新每个缩放组件。
但是在 Java 1.6 中 getPreferredSize 返回您传递给它的 Dimension 对象的副本,因此它不再是正确的类型,并且没有任何内容可以缩放。
我通过将组件类放在类路径上的 JRE 前面,用我自己的实现(感谢开源 JRE)覆盖组件类,很快就破解了一个解决方案。然而,这个解决方案显然是不可维护的。
有没有人知道这个问题的任何其他解决方案,你将如何在 java 1.5/1.6 中实现 GUI 缩放?