Да!Это возможно и довольно просто тоже.Я не делал ротации, но я успешно выполнил другие аффинные преобразования (масштабирование всего GUI вверх и вниз) в проекте.Я не могу понять, почему вращения должны быть другими.
Вместо того, чтобы пытаться масштабировать каждый компонент, используйте тот факт, что вы можете установить преобразование для объекта Graphics.Так как это распределяется между всеми визуализируемыми компонентами, все вещи преобразуются одновременно «бесплатно».Важно понимать, что преобразование - это только шаг процесса рендеринга ... т.е. все компоненты все еще верят, что у них есть границы (местоположения + размеры), которые вы дали им в нетрансформированном мире.Это оставляет нам задачу правильно обрабатывать события мыши.Для этого вы просто добавляете стеклянную панель перед главной панелью.Эта панель собирает все события мыши и применяет обратное преобразование к событию, а затем отправляет событие далее ко всем другим компонентам.
Концептуально очень просто!Тем не менее, я помню, что потребовалось некоторое время, чтобы все это стало четким.Особенно тот факт, что визуализированные тексты (шрифты) в Java некорректно линейно масштабируются (масштабируется дискретными шагами, соответствующими размерам шрифта), поставили последнюю проблему в моем случае scale-affine-translation.Может быть, вам не нужно беспокоиться об этом, если вы только вращаетесь.
Я получил вдохновение от JXTransformer: http://www.java.net/blog/alexfromsun/archive/2006/07/jxtransformer_t.html