アクションイベントを起こしたい(JavaのQ&A)

解決済みの質問

アクションイベントを起こしたい

JButtonを設置して、
ボタンを押したときに、
何かする方法はわかります。

例えば、ボタンを押したときではなくて、
ほかの処理と連動させて、
プログラムからアクションイベントを起こすにはどうしたらいいのでしょう?

Delphiでしたら、たとえば

Buttton1.click;

でいいんですが・・・・。

投稿日時 - 2003-08-26 16:46:54

連想キーワード:

QNo.638056

すぐに回答ほしいです

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

JButtonは、親クラスのAbstractButtonからdoClickというメソッドを継承しているので、これを使えば何とかなるような気がします。
私は実際にこのメソッドを使ったことはありませんが、Swingなら多分これでいけるのでは?

またもう一つ方法がありまして、(最初の回答者も同じようなことをおっしゃっていますが)ボタンイベントとそれとは別の処理で共通している部分をメソッドとして独立させておき、それぞれの処理でそのメソッドを呼び出すということもできます。

投稿日時 - 2003-08-27 11:21:20

お礼

ものすごく簡単でした!

が・・・1.4以上でないとだめなんですね・・・

実は今セミナーで学んでいて、
そこで使っているのが1.3なんですよ・・・

1.3で何とか実現したいのですが・・・

投稿日時 - 2003-08-31 02:56:44

ANo.2

UKY

2人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

こんな感じでボタン作りますよね。
JButton jButton = new JButton("button");
jButton.addActionListener(new ButtonListener());
//////////
中略
//////////
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
//何かのイベント
}
}

このときに生成したButtonはインナークラスButtonLister(ActionListerをimplements)をaddしておくことによって、ActionEventを受けることができますよね。

そして、他で発生したActionEventを拾って、
ActionEvent e = //発生したActionEvent;
jButton.actionPerformed(e);
としたらJButtonが持っているActionを発生できます。

投稿日時 - 2003-08-28 13:21:11

補足

遅くなりました!
回答ありがとうございます。

ボタンを4つ用意して、
他のボタンを押したとき、
連動させたかったのですが、

たとえばbtn1とbtn2で、ご回答にあるように
btn1がButtonListenerだとすると
Actionevevt のeはその内部で定義されており・・・
外側から
ActionEvent e = //発生したActionEvent;
jButton.actionPerformed(e);

のようにするとシンボルが解決できません、のおなじみなエラーが出てしまいます。

さらに、btn2を押したあとにその処理後にbtn1を押す、と言うことをプログラムしたかったのですが、
btn2Listenerクラスの内部で、上記のように記述すると、
Actionevent eはすでに定義されています、と言うようなエラーが出てしまいました・・・

う~~ん
とうなってしまいました・・・・

投稿日時 - 2003-08-31 02:20:11

ANo.1

java.awt.Button ならば

Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new ActionEvent(button,ActionEvent.ACTION_PERFORMED,"Click"));

でいけたんですが JButton では駄目みたい。。。
で、アクションイベントを起すという方法ではなくて、actionPerformed() 内の処理を別メソッドとして定義し、

public void actionPerformed(ActionEvent e){
  foo();
}
private void foo(){
  // 何がしかの処理
}

と、actionPerformed() から呼び出しをする形にします。
で、他の処理と連動した流れで直接 foo() を呼び出すのも良いのですが、それではスレッドセイフではないので

SwingUtilities.invokeLater(new Runnable(){
  public void run(){
    foo();
  }
}

とすれば良いかと思います。
うーん、しかし Swing の場合のイベント起こしってどうやるんでしょうね??

投稿日時 - 2003-08-27 05:23:07

補足

スレッドセイフの意味がよくわからないのですが、
結局はこの方法を使いました。

ありがとうございました

投稿日時 - 2003-09-02 15:24:32

この質問に関連するQ&A
  • jquery の clickイベント
  • いつもお世話になっております。 当方jQueryは初めてで試行錯誤しながら使っています。 標題について質問です。 <form> <input type="text" id="code[1]...
  • DelphiのOKボタンのイベント処理
  • はじめまして。Delphiを初めて数ヶ月の初心者なんですが、 わからないことがありますので教えてください。 フォームにOKボタンとCancelボタンを作成し、 OKボタンが押されたときのOnClic...
  • CLICKイベントと、MOUSE_DOWNイベント
  • AS3です。 CLICKイベントと、 MOUSE_DOWN、MOUSE_UPイベント って 併用できないのでしょうか? 画像のギャラリーを作っています。 クリックしたときに、ボタンの色が一瞬変わっ...
合わせてチェックしたい
PR

OKWaveのオススメ