Как я могу панорамировать и масштабировать JComponents?

Я пытаюсь создать пользовательский интерфейс для графического программирования. Я хотел бы использовать JUNG для обработки графических аспектов рисунка. Вместо того, чтобы рисовать все мои виджеты с помощью Graphics2D, я хотел бы использовать виджеты Swing как можно чаще, чтобы воспользоваться преимуществами архитектуры событий Swing.

Я хотел бы иметь возможность панорамировать, масштабировать, вращать холст, на котором нарисован график, но при этом сохранять возможность манипулировать виджетами Swing, если они достаточно велики, чтобы их можно было увидеть. Я также хочу, чтобы виджеты автоматически размещались на основе выбранного мной алгоритма компоновки JUNG.

Как мне объединить рисунки Graphics2D и компоненты Swing?

Я понимаю, что компоненты JComponent сами рисуют себя, используя свои методы paint(). У меня возникли проблемы с пониманием того, как создавать объекты Swing, на которые могут влиять преобразования Graphics2D, и при этом сохранять всю свою обработку событий. Я не могу просто показать изображение компонента. Компонент должен быть активным.

Я попытался создать подкласс виджета и добавить AffineTransform к графическому объекту, который передается родительскому методу paint. Он вращает виджет, но обрезка кажется отключенной.

Какие-либо предложения? На данный момент я бы не хотел добавлять еще одну библиотеку, если это возможно.


person Jeffrey Guenther    schedule 03.04.2012    source источник


Ответы (3)


Например, JDigit extends JButton и переопределяет paintComponent() для масштабирования до размера окружающего его Container. Для скорости компонент использует предварительно обработанные глифы, но deriveFont() лишь немного медленнее. Подобные результаты можно получить, реализуя интерфейс Icon. Этот пример масштабирует сетку кнопок до нескольких заранее определенных размеров. example полностью отказывается от компонентов, масштабируя графический контекст и все содержимое.

person trashgod    schedule 04.04.2012

Проект JXLayer имеет реализацию для преобразования всего пользовательского интерфейса в разные масштабы.

Вы можете ознакомиться с этой демонстрацией.

person ring bearer    schedule 03.04.2012
comment
Спасибо, я посмотрю. Я хотел бы лучше понять, почему у меня такая проблема. - person Jeffrey Guenther; 04.04.2012
comment
@JeffreyGuenther перенаправление через java.net всегда проблема; это заканчивается 404. Итак, я отредактирую ссылку в вашем посте, если это возможно. - person ee.; 04.04.2012

Согласно моим исследованиям, использование Piccolo2D обеспечивает возможность панорамирования и масштабирования элементов Swing. Используя алгоритмы компоновки графа JUNG для компоновки графа и узлов Piccolo2D PSwing, я могу сгенерировать граф компонентов Swing, которые можно использовать, которые можно компоновать с помощью алгоритма, а также масштабировать и панорамировать.

person Jeffrey Guenther    schedule 05.04.2012