Увеличить приложение Java Swing
Я ищу способы увеличить приложение Java Swing. Это означает, что я хотел бы изменить размер всех компонентов в данной JPanel на определенный коэффициент, как если бы я сделал снимок экрана с пользовательского интерфейса и просто применил операцию "Масштаб изображения". Размер шрифта, а также размер флажков, текстовых полей, курсоров и т.д. Должны быть скорректированы.
Можно масштабировать компонент, применяя преобразования к графическому объекту:
protected Graphics getComponentGraphics(Graphics g) {
Graphics2D g2d=(Graphics2D)g;
g2d.scale(2, 2);
return super.getComponentGraphics(g2d);
}
Это работает до тех пор, пока вы не заботитесь о самообновляющихся компонентах. Если у вас есть текстовое поле в вашем приложении, этот подход перестает работать, поскольку текстовое поле обновляется каждый раз, чтобы показать (мигающий) курсор. И поскольку на этот раз он не использует модифицированный графический объект, компонент появляется в прежнем месте. Есть ли возможность постоянно изменять компонент графического объекта? Также существует проблема с обработчиками событий щелчка мыши.
Другая возможность - изменить все дочерние компоненты JPanel (setPreferredSize) на новый размер. Это не работает для флажков, так как отображаемое изображение флажка не меняет его размер.
Я также подумал о программировании моего собственного менеджера компоновки, но я не думаю, что это сработает, поскольку менеджеры макета только изменяют позицию (и размер) объектов, но не могут масштабировать флажки (см. Предыдущий параграф). Или я ошибаюсь в этой гипотезе?
У вас есть идеи, как можно достичь масштабируемого графического интерфейса Swing без программирования пользовательских компонентов? Я искал вращающиеся пользовательские интерфейсы, потому что проблема кажется знакомой, но я также не нашел удовлетворительного решения этой проблемы.
Спасибо за вашу помощь,
Крис
Ответы
Ответ 1
Вы можете попробовать создать JXLayer library.
В нем есть несколько инструментов, которые могут помочь вам сделать масштабирование. Проверьте приведенные здесь примеры . Я бы посоветовал вам больше узнать о TransformUI из этой библиотеки. Из примера, похоже, что это поможет решить вашу проблему.
Ответ 2
Масштабирование представления достаточно просто; преобразование координат мыши лишь немного сложнее. Здесь простейший пример. Я бы сохранил JComponent
, хотя может иметь смысл разработать аналогичный ScaledComponent
, который знает о геометрии. То, что предлагает @Gnoupi использование библиотеки.
Ответ 3
Эй, вы можете попробовать это, если хотите увеличить изображение, как и любой другой просмотрщик изображений, используя JPanel, нарисовать изображение, используя метод drawImage(), теперь создайте кнопку, и когда вы нажмете кнопку, увеличьте размер панели на кадр выглядит так, как если бы изображение просматривалось в Zoom
Ответ 4
Вы можете найти полезный API Piccolo2D.java: http://code.google.com/p/piccolo2d/
Это очень просто.
Это, в частности, делает его плавное масштабирование. Вы по существу делаете "холст", который может содержать различные элементы, и затем может масштабироваться, просто удерживая нажатой правую кнопку мыши и перемещая курсор мыши назад и вперед.
Я работал над командой, которая использовала ее для создания этого: http://sourceforge.net/apps/mediawiki/guitar/index.php?title=WebGuitar#EFG.2FGUI_Visualizer
Узлы, которые вы видите там, являются кликабельными ссылками.