Увеличить приложение 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

Узлы, которые вы видите там, являются кликабельными ссылками.