2010-05-31 2 views
13

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

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

    g2d.scale(2, 2); 

    return super.getComponentGraphics(g2d); 
} 

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

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

+0

масштабирование уже отображенных компонентов, содержащих такие элементы, как сглаженные шрифты, даст потрясающие результаты, особенно если эти шрифты используют сглаживание RGB-прореживания/субпикселя. – NoozNooz42

ответ

9

Вы могли бы дать попробовать на JXLayer library.

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

+0

Спасибо за ваш ответ! Это очень хороший способ сделать это. Я оставляю вопрос открытым еще на несколько часов, если есть другие люди, которые могут внести свой вклад в эту тему, но боятся вопросов, отмеченных как «ответил» :-) – Shirky

+0

@Shirky - в экстренных случаях нет Принимая, особенно если кто-то приходит с чем-то лучше;) – Gnoupi

+0

Время попрощаться ;-). Я закрываю вопрос, ваш ответ был именно тем, что я искал. Благодарю. – Shirky

7

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

+1

Спасибо за ваш ответ. Я искал универсальный подход. Другой проблемой является настройка отдельных компонентов (статья, к которой вы привязались). – Shirky

2

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

2

вы можете найти Piccolo2D.java API полезно: http://code.google.com/p/piccolo2d/

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

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

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

узлов, которые вы видите есть сами активные ссылки.