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

JavaAppletのイベント処理についてお伺いしたい事があります。


Appletで作成した画面にボタンAを設置し、
actionPerformedのイベントを作成しました。

private void ボタンA_actionPerformed (java.awt.event.ActionEvent ae) {
  //処理内容
}

ボタンAを押下すると上記のイベントが呼ばれ正常に動作するのですが、このイベント処理をボタンAを押下する以外の方法で呼び出す事は可能なのでしょうか?


下記内容は例として、ボタンBで[F1]が押されたらボタンAの押下処理を呼び出そうとしております。

private void ボタンB_keyPressed (java.awt.event.KeyEvent ke) {

  java.awt.event.ActionEvent ae;
  ae = ○○○○○○;

  if (e.getKeyCode() == java.awt.event.KeyEvent.VK_F1) {
    ボタンA_actionPerformed(ae);
  }
}

java.awt.event.ActionEventで定義した変数aeの中身の所でつまづいております。


ご存知の方おりましたらご指導願います。

A 回答 (3件)

 こんにちは。



 普通こういう場合は、一つ一つのメソッドの役割をきっちり決めて、処理を分けたほうがよいと思います。

 たとえば、

private void ボタンA_actionPerformed (java.awt.event.ActionEvent ae) {
  hogehoge();
}

private void hogehoge() {
  //処理内容
}

private void ボタンB_keyPressed (java.awt.event.KeyEvent ke) {
  if (e.getKeyCode() == java.awt.event.KeyEvent.VK_F1) {
    hogehoge();
  }
}

 ボタンA_actionPerformedメソッドに処理を書いてしまうと、ボタンA_actionPerformedメソッドの役割があいまいになってしまい、他のKeyEventがおきたときに、ボタンA_actionPerformedメソッドを呼び出すという直感的でない形になってしまいます。

 実際、本来必要のないActionEventをどう生成するか悩んでおられます。

 ボタンA_actionPerformedメソッドは、ボタンAのクリックされたときに呼び出されるメソッド、
 ボタンB_keyPressedは、ボタンBが押下されたときに呼び出されるメソッド、
 hogehogeメソッドは、処理をするメソッド、
 と、一つ一つのメソッドの役割を明確化したほうがわかりやすくなると思います。
    • good
    • 0

ご使用のボタンがswingなのかawtなのか判りませんが、JButtonであると仮定して回答します。


javax.swing.AbstractButton#doClick()メソッドにてご希望の処理が実現出来るかと思います。
このメソッドを使用することで、ボタンが押下されたとみなされ、リスナーが呼び出されます。

以下、JavaDocの説明です。

プログラム上で「クリック」を実行します。ユーザがマウスのボタンを押し、すぐに離す操作 (マウスのクリック) を実行した場合と同じ処理を行います。

参考URL:http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ …
    • good
    • 0

 以下は、ActionEventを直接actionPerformedを呼び出して渡すのと、


dispatchEventを使って転送する場合の例です。

-----アプレット-----

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

class aebutton extends Button implements ActionListener {

TextArea TA;

public aebutton(String s, TextArea ta) { super(s);
TA = ta;
addActionListener(this);
};

public void actionPerformed(ActionEvent ae) {
TA.append("[" + getLabel() + "] Clicked\n");
};

}

public class actionev extends Applet implements KeyListener {

TextArea TA;
aebutton BN1, BN2;

public void init() {

setLayout(new BorderLayout());

TA = new TextArea();
TA.addKeyListener(this);
add(TA, BorderLayout.CENTER);

BN1 = new aebutton("Button1", TA);
BN1.addKeyListener(this);
add(BN1, BorderLayout.NORTH);

BN2 = new aebutton("Button2", TA);
BN2.addKeyListener(this);
add(BN2, BorderLayout.SOUTH);

};

public void keyPressed(KeyEvent ke) {

if (ke.getKeyCode() == KeyEvent.VK_F1) {
ActionEvent ae = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "BN1");
BN1.actionPerformed(ae);
};

if (ke.getKeyCode() == KeyEvent.VK_F2) {
ActionEvent ae = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "BN2");
BN2.dispatchEvent(ae);
};

};

public void keyReleased(KeyEvent ke) {};
public void keyTyped(KeyEvent ke) {};

}

-----ページ-----

<html>
<head><title>make action event</title></head>
<body><center>
<applet codebase="." code="actionev" width="320" height="240"></applet>
</center></body>
</html>
    • good
    • 0

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