Увеличить приложение Java Swing - PullRequest
13 голосов
/ 31 мая 2010

Я ищу способы увеличения в приложении Java Swing. Это означает, что я хотел бы изменить размеры всех компонентов в данном JPanel с учетом данного фактора, как если бы я сделал снимок экрана пользовательского интерфейса и просто применил операцию «Масштаб изображения». Размер шрифта, а также размер флажков, текстовых полей, курсоров и т. Д. Должны быть скорректированы. Можно масштабировать компонент, применяя преобразования к графическому объекту:

 protected Graphics getComponentGraphics(Graphics g) {
  Graphics2D g2d=(Graphics2D)g;

  g2d.scale(2, 2);

  return super.getComponentGraphics(g2d);
 }

Это работает, если вы не заботитесь о самообновляющихся компонентах. Если у вас есть текстовое поле в вашем приложении, этот подход перестает работать, так как текстовое поле обновляется каждую секунду, чтобы показать (мигающий) курсор. И поскольку он не использует измененный графический объект, на этот раз компонент появляется в старом месте. Есть ли возможность постоянно менять графический объект компонентов? Существует также проблема с обработчиками событий щелчка мыши. Другой возможностью было бы изменение размера всех дочерних компонентов JPanel (setPreferredSize) до нового размера. Это не работает для флажков, так как отображаемое изображение флажка не меняет свой размер. Я также думал о программировании своего собственного менеджера по расположению, но я не думаю, что это будет работать, так как менеджеры по расположению только изменяют положение (и размер) объектов, но не могут увеличивать флажки (см. Предыдущий параграф). Или я не прав с этой гипотезой? У вас есть идеи, как можно добиться масштабируемого графического интерфейса Swing без программирования пользовательских компонентов? Я искал вращающиеся пользовательские интерфейсы, потому что проблема кажется знакомой, но я также не нашел удовлетворительного решения этой проблемы.

Спасибо за вашу помощь, Chris

Ответы [ 4 ]

9 голосов
/ 31 мая 2010

Вы можете попробовать библиотеку JXLayer .

В нем есть несколько инструментов, которые могут помочь вам сделать масштабирование. Проверьте примеры , показанные здесь . Я бы порекомендовал вам прочитать больше о TransformUI из этой библиотеки. Из примера видно, что это может помочь в решении вашей проблемы.

7 голосов
/ 31 мая 2010

Масштабирование вида достаточно просто; преобразование координат мыши только немного сложнее. Вот элементарный пример . Я бы не учел JComponent с, хотя может иметь смысл разработать аналог ScaledComponent, который знает о геометрии. Вот где @ Gnoupi предлагает использовать библиотеку.

2 голосов
/ 27 сентября 2012

API Piccolo2D.java может оказаться полезным: http://code.google.com/p/piccolo2d/

Это очень просто.

Особенно это касается плавного масштабирования. По сути, вы создаете «холст», который может содержать различные элементы, а затем масштабировать, просто удерживая правую кнопку мыши и перемещая мышь назад и вперед.

Я работал в команде, которая использовала его для создания этого: http://sourceforge.net/apps/mediawiki/guitar/index.php?title=WebGuitar#EFG.2FGUI_Visualizer

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

2 голосов
/ 15 ноября 2011

эй, вы можете попробовать это, если вы хотите увеличить изображение как любой другой просмотрщик изображений, используйте JPanel для рисования изображения, используя метод drawImage (), теперь создайте кнопку, и когда вы нажимаете кнопку, увеличиваете размер панели в кадре это выглядит так, как будто изображение просматривается в увеличении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...