解決済みの質問
JButtonは、親クラスのAbstractButtonからdoClickというメソッドを継承しているので、これを使えば何とかなるような気がします。
私は実際にこのメソッドを使ったことはありませんが、Swingなら多分これでいけるのでは?
またもう一つ方法がありまして、(最初の回答者も同じようなことをおっしゃっていますが)ボタンイベントとそれとは別の処理で共通している部分をメソッドとして独立させておき、それぞれの処理でそのメソッドを呼び出すということもできます。
投稿日時 - 2003-08-27 11:21:20
お礼
ものすごく簡単でした!
が・・・1.4以上でないとだめなんですね・・・
実は今セミナーで学んでいて、
そこで使っているのが1.3なんですよ・・・
1.3で何とか実現したいのですが・・・
投稿日時 - 2003-08-31 02:56:44
2人が「このQ&Aが役に立った」と投票しています
こんな感じでボタン作りますよね。
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
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
OKWaveのオススメ
おすすめリンク