2013-05-18 1 views
2

У меня есть настраиваемый компонент GameViewCanvas extends JPanel, который будет содержать несколько фрагментов (текстуры 800x800). Теперь в GameViewCanvas я переопределил метод paint(), чтобы он рисовал дочерние элементы на трансформированном холсте (масштабирование, панорамирование и вращение).Swing: передать события дочерним компонентам преобразованного родителя

Теперь я хочу делегировать событиям, таким как MouseEvent и MouseMotionEvent, соответствующим детям - проблема, конечно, в том, что Swing понятия не имеет, где дети находятся на фактическом фрейме. Я думал, что мог бы просто переопределить метод, например getComponentAt, в родительском, но такой удачи не было - я считаю, что Swing напрямую перебирает детей.

Возможно, я собираюсь все это неправильно, поэтому, пожалуйста, совет. Спасибо заранее.

+0

Интересный вопрос, 1+. Я не знаю решения, но если это была моя проблема, я бы искал исходный код Swing, чтобы узнать, может ли это дать мне ключ. –

+1

Google 'JXLayer' (AKA' JLayer' в Java 7). Это делает именно то, что вы только что попросили. Поскольку они исчезли из Сети, я предоставил все примеры [здесь] (https://www.dropbox.com/s/re1hmvypp19oqy1/JXLayer-PBJar-Demo.zip) – MadProgrammer

ответ

4

Посмотрите на JXLayer. Он делает именно то, что вы только что попросили.

Есть несколько отличных примеров от Piet Blok, которые, к сожалению, исчезли из сети. С этой целью я сделал их доступными here.

Взгляните на демо-версию TestWrapped в источнике pbjar. Вероятно, это лучший пример.

enter image description here

пс - JXLayer теперь официально частью Java 7, известный как JLayer

+0

Спасибо! Это, похоже, решает проблему делегации. Однако, поскольку теперь я выполняю преобразование в LayerUI, холст обрезается в соответствии с границами компонента JLayer, так что, когда я уменьшаю масштаб, фактически отображается только часть доступного пространства. – hauptbenutzer

+0

У вас есть пример, который вы публикуете (обновите свой вопрос) – MadProgrammer