2011-07-05 28 views
8

在Java中實現「國王的角落」(榮耀多人紙牌遊戲)。如何檢測Java中的Image對象的鼠標單擊事件?

我試圖讓玩家從他們的手中將牌(圖片)拖到桌子上的其他地方。問題是玩家的手是「扇形的」,所以卡的圖像被旋轉並且它們重疊。

這裏是一個手的一個例子:

enter image description here

我認爲使每個卡JPanel,但隨後的問題是,我不得不畫卡內旋轉,其矩形JPanel,因爲它們本身不能旋轉。理想情況下,我想避免mouse-x,y公式來確定選擇哪張卡。

使用事件驅動方法,我怎樣才能確定從手中選擇哪張牌?

+4

嗯,如何使用從Shape接口派生的一個或多個具體類?這有一個包含方法,可以派上用場。每次使用AffineTransform時,旋轉都很容易。 –

回答

5

AWT(和Swing)組件通常是矩形的(與軸對齊)。

但是,情況並非如此 - 儘管實際邊界必須是矩形,但組件使用的實際區域可能更小。組件支持一個contains(Point)方法,只要問題出現在某個點所屬的組件上,該方法就會被事件調度機制調用 - 例如,鼠標點擊。 (不同組件的重疊將由父容器內的z順序處理。)

您可以基於Shape.contains()方法實現此方法,使用仿射變換矩形作爲形狀。每個旋轉的組件都會知道它自己的形狀(或者從它的AffineTransform中動態生成,也可以用於繪製自己的形狀)。

有一個自定義佈局管理器,它也安排你的卡。 (不要使用CardLayout,儘管名稱。)

我不知道我會按照每個卡單獨組件的方式,但你當然需要一些代表旋轉矩形的對象。

+0

完美工作。解決方案是使用AffineTransform的createTransformedShape,然後檢查該形狀是否包含鼠標點擊的Point。謝謝。 – rtheunissen

+0

@ paranoid-android:你應該通過點擊這個答案左邊的勾號來接受這個答案。 –

+0

@Martijn Courteaux:所以我們學習。謝謝。 – rtheunissen