• ベストアンサー

ボタンの押し上げ判定は

public boolean handleEvent(Event e) { if (e.target instanceof Button) { myfunc(); } } ボタンをクリックすると、myfunc();が2回実行されます。 ボタンアップでも実行されてしまうからですか? 押し下げの時だけ実行されるようにするにはどういう方法がいいですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

handleEvent()というメソッドは、様々なイベントを 受け取る元締みたいなもんなので、マウスを押した、 マウスを戻したといったもの全てに反応します。 本来ボタンを押したというイベントはaction()メソッド で対応するのが普通です。 public boolean action(Event e,Object o){   if(e.target instanceof Button){     myfunc();   }   return true; } って感じでしょうかね。 どうしても、handleEvent()を使いたいのでしたら、 public boolean handleEvent(Event e){   if(e.target instanceof Button && e.id==Event.ACTIONEVENT){     myfunc();   }   return super.handleEvent(e); } とすればいいと思います。 けど、instanceof Button というのは考えものです。 これでは、複数のボタンが配置されていたら、どの ボタンが押されてもmyfunc()を実行してしまいます。 前もってボタンのインスタンス変数を作っておいて、 Button button=new Button("CLICK"); public boolean action(Event e,Object o){   if(e.target==button){     myfunc();   }   return true; } とした方が良いのではないかと思います。 けどけど(笑)そもそも、何故JDK1.0.2という古い 時代のイベント処理を使うのか疑問ですね。 マイクロソフト社謹製のVMでもJDK1.1ですので、 アプレット作成だとしても意味はありません。 殆ど誰も使わなくなった記述を覚えても時間の無駄 でしかないですよ。 そもそも、コンパイラに怒られますし、いつまで サーポート対象でいられるのかさえ疑問です。

rasuck
質問者

お礼

handleEvent() を action() に変えたところ、ボタンアップのみの反応となり、希望どうりに なりました。 ありがとうございます。 非推奨と言われることもなくなってすっきりしました。 ボタンを押したという判別も、複数のボタンに対応させるため、e.target instanceof より e.target で、自分の付けた 変数名で判別するようにします。 別スレッドで誤字のことも見ました。 間違えたいとうことは手打ちでソースを書いたんでしょうね。 すごいと思いました。

関連するQ&A