Я работаю над большим унаследованным Java-приложением, для которого важной функцией было автоматическое масштабирование компонентов графического интерфейса на основе разрешения монитора. Мы обновляем JVM, на котором он работает, с версии 1.4.2 до 1.6, и теперь масштабирование нарушено из-за изменения в реализации java.awt.Container.getPreferredSize ().
getPrefferedSize используется для возврата того же объекта, который вы дали с помощью setPreferredSize () (все также относится к минимальному / максимальному размеру), поэтому мы будем вызывать setPRefferedSize для каждого компонента масштабирования с отдельным подклассом java.awt.Dimension тогда мы будем обходить иерархию компонентов и обновлять каждый компонент масштабирования всякий раз, когда изменяется разрешение.
Однако в Java 1.6 getPreferredSize возвращает копию объекта Dimension, который вы передали, поэтому он больше не является правильным типом и ничего не масштабируется.
Я довольно быстро взломал решение, переопределив класс Component своей собственной реализацией (спасибо JRE с открытым исходным кодом), поместив его перед JRE на пути к классам. Однако это решение явно не поддается ремонту.
Кто-нибудь еще знает какое-либо другое решение этой проблемы, как бы вы реализовали масштабирование GUI в Java 1.5 / 1.6?