Я ищу способы увеличения в приложении Java Swing. Это означает, что я хотел бы изменить размеры всех компонентов в данном JPanel с учетом данного фактора, как если бы я сделал снимок экрана пользовательского интерфейса и просто применил операцию «Масштаб изображения». Размер шрифта, а также размер флажков, текстовых полей, курсоров и т. Д. Должны быть скорректированы.
Можно масштабировать компонент, применяя преобразования к графическому объекту:
protected Graphics getComponentGraphics(Graphics g) {
Graphics2D g2d=(Graphics2D)g;
g2d.scale(2, 2);
return super.getComponentGraphics(g2d);
}
Это работает, если вы не заботитесь о самообновляющихся компонентах. Если у вас есть текстовое поле в вашем приложении, этот подход перестает работать, так как текстовое поле обновляется каждую секунду, чтобы показать (мигающий) курсор. И поскольку он не использует измененный графический объект, на этот раз компонент появляется в старом месте. Есть ли возможность постоянно менять графический объект компонентов? Существует также проблема с обработчиками событий щелчка мыши.
Другой возможностью было бы изменение размера всех дочерних компонентов JPanel (setPreferredSize) до нового размера. Это не работает для флажков, так как отображаемое изображение флажка не меняет свой размер.
Я также думал о программировании своего собственного менеджера по расположению, но я не думаю, что это будет работать, так как менеджеры по расположению только изменяют положение (и размер) объектов, но не могут увеличивать флажки (см. Предыдущий параграф). Или я не прав с этой гипотезой?
У вас есть идеи, как можно добиться масштабируемого графического интерфейса Swing без программирования пользовательских компонентов? Я искал вращающиеся пользовательские интерфейсы, потому что проблема кажется знакомой, но я также не нашел удовлетворительного решения этой проблемы.
Спасибо за вашу помощь,
Chris