>>457
462さんが回答しているようですが、もう一つ別のレス。

やりたいことが今ひとつ分からないので困ってしまうのですが、
Button a; Button b; の2つがCanvasの上に乗っていて、
aかbのどちらかを「クリック」し、いわば描く図形の選択をして、
それから「もう一度」Canvas上をクリックして、その位置に選択した
図形を描くということですよね? Buttonをクリックしたその位置に
図形は書けないから(CanvasがButtonに隠されてしまっている訳だから)。
すると問題はそのButton A,Bを「クリック」したとき、どちらのButtonが
選択されたのかをどうやって認識したらいいのかということなのでしょうか?
クラスを二つ作ってそれぞれにListenerを作るという発想も分からない。
そのButtonやCanvasを乗せているオブジェクト(AppletかFrameかは知り
ませんが)、そこでListnerを実装するのが普通と思います。さてそこで、
Buttonのクリックを拾うのは、mouseClickedではなくactionPerformedです。
従ってimplementsするのも、ActionListnerです。actionPerformedから
ActionEventが渡されるので、そのgetSourceメソッドによりa,bどちらが
クリックされたかが分かります。これを覚えておいて、その後Canvas上で
クリックされたとき、これを今度こそmouseClickedで受け取り、getx,gety
メソッドにより位置を得て、そこに先に覚えて置いた図形を描く…、と
いった処理になるのではないでしょうか? ただしmouseClickedではなく、
mousePressedで処理する方がベターと思います。
もしかして全然見当違いの回答になったかな?