Как вы можете обнаружить событие щелчка мыши на объекте изображения в Java? - PullRequest
8 голосов
/ 05 июля 2011

Реализация " Kings 'Corners " (прославленный многопользовательский пасьянс) на Java.

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

Вот пример руки:

enter image description here

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

Используя подход, основанный на событиях, как я могу определить, какая карта выбрана из руки?

1 Ответ

5 голосов
/ 05 июля 2011

AWT (и Swing) компоненты обычно являются прямоугольными (выровненными по осям).

Но это не обязательно должно иметь место - в то время как реальные границы должны быть прямоугольными, фактическая область, которую использует компонентможет быть меньше.Компонент поддерживает метод contains(Point), который вызывается механизмом диспетчеризации событий всякий раз, когда возникает вопрос, к какому компоненту относится точка - например, для щелчков мыши.(Перекрытие различных компонентов будет обрабатываться z-порядком внутри родительского контейнера.)

Вы можете реализовать этот метод на основе метода Shape.contains(), используя аффинно преобразованный прямоугольник в качестве фигуры.Каждый из ваших повернутых компонентов будет знать свою собственную форму (или генерировать ее на лету из своего AffineTransform, того же самого, который также будет использоваться для рисования самого себя).

Иметь собственный LayoutManager, который также упорядочивает ваши карты,(Не используйте CardLayout, несмотря на название.)

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

...