プロが教える店舗&オフィスのセキュリティ対策術

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

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

Delphiでしたら、たとえば

Buttton1.click;

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

A 回答 (3件)

JButtonは、親クラスのAbstractButtonからdoClickというメソッドを継承しているので、これを使えば何とかなるような気がします。


私は実際にこのメソッドを使ったことはありませんが、Swingなら多分これでいけるのでは?

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

ものすごく簡単でした!

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

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

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

お礼日時:2003/08/31 02:56

こんな感じでボタン作りますよね。


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を発生できます。

この回答への補足

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

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

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

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

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

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

補足日時:2003/08/31 02:20
    • good
    • 0

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/09/02 15:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!