思いついたのは、
A: それらの部品はShapeとして描画して、イベントは親コンポーネントで拾う。
どのShapeの中で発生したイベントかは、管理しているShapeのそれぞれに対し
てそれぞれcontains(x, y)で調べる。

B: JComponentを継承して自身を非矩形に描画する。
イベントは普通に拾える。透明部分でも拾っちゃうかも。
ヒント(setOpaque(false))