• 締切済み

JavaAppletのイベントの強制発生方法

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の中身の所でつまづいております。 ご存知の方おりましたらご指導願います。

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

  • ssr-y6
  • ベストアンサー率71% (5/7)
回答No.3

 以下は、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>

  • mocajaba
  • ベストアンサー率20% (1/5)
回答No.2

ご使用のボタンがswingなのかawtなのか判りませんが、JButtonであると仮定して回答します。 javax.swing.AbstractButton#doClick()メソッドにてご希望の処理が実現出来るかと思います。 このメソッドを使用することで、ボタンが押下されたとみなされ、リスナーが呼び出されます。 以下、JavaDocの説明です。 プログラム上で「クリック」を実行します。ユーザがマウスのボタンを押し、すぐに離す操作 (マウスのクリック) を実行した場合と同じ処理を行います。

参考URL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/index.html
  • PecoPlus
  • ベストアンサー率76% (144/188)
回答No.1

 こんにちは。  普通こういう場合は、一つ一つのメソッドの役割をきっちり決めて、処理を分けたほうがよいと思います。  たとえば、 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メソッドは、処理をするメソッド、  と、一つ一つのメソッドの役割を明確化したほうがわかりやすくなると思います。

関連するQ&A

  • JButton配列でのイベント処理

    JAVA初心者です。 ある、画面にボタン50個を作成しました。(JButtonの配列で作成しました。) そこで質問です。下記のコールバックメソッド(?)btnActionPerformedを50個分作成するのは 煩雑なので1つで処理しようと考えております。 for (int cnt=0; cnt<50; cnt++) { ... JButtonのインスタンス生成処理等 ... btn[cnt-1].addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { btnActionPerformed(evt); } }); } ... ... ... private void btnActionPerformed(java.awt.event.ActionEvent evt) { ... } btnActionPerformedで受け取ったevtパラメータから押されたボタンのプロパティ等 が判別つくのでしょうか?ActionEventクラスのヘルプを参照しましたが、 いまひとつ良くわかりません。 また、このevtパラメータを使う方法以外で、この様な事が実現できる方法が あれば教えてください。よろしくお願いします。

    • ベストアンサー
    • Java
  • JAVAのキーアクションについて

    awt.eventのKeyListenerを使ってキーアクションを設定したのですが、例えば"ENTER"を押すとキーアクションが無効になり再び"ENTER"を押すとキーアクションを有効になるといったように、キーアクションを制御することはできないのでしょうか?ちなみ以下のようににif文を使ってもできませんでした。 flag=falseを設定してある public void keyPressed(KeyEvent keyEvent){   if(keyEvent.getKeyCode()==KeyEvent.VK_LEFT){     A();   } } public void A(){   if(flag=false){      ・     ・     ・    } }

    • ベストアンサー
    • Java
  • 一つにまとめたい

    最近JAVAプログラミングをやりはじめました。 netbeansで作成しています。 文章を入力し、ドラッグしてもらい格納ボタンを押すと下に表示されます。 ドラッグした文字でいいならOKボタンを押します。 押すと配列に格納されます。 表示を押すと配列の中身が見えます(これは少し適当な作りですが) 今の段階ではこれでうまくいきます。ですがどの配列に入れるか選択したい場合に困っています。 「配列2に格納」というボタンを作った場合、配列2に格納するようにするにはどうすればよいでしょうか? 今の段階では「配列に格納」というボタンは実際はドラッグした文字しか表示していませんが、本来は複数のボタンを配置してボタンにより動作を変えたいのです。ただ同じものを使いたいのです。わざわざ別のボタンやテキストエリアを作るのは無駄ですし。 ただ色々試してもエラーが出てしまい実行できずにいます。 ソースを載せておきます。お願いします。 package javaapplication5; public class sample11 extends javax.swing.JFrame { int i=0; String word1; String[] test = new String[10]; /** Creates new form sample11 */ public sample11() { initComponents(); } @SuppressWarnings("unchecked") private void initComponents() { word = new javax.swing.JTextField(); jButton1 = new javax.swing.JButton(); SelectWord = new javax.swing.JTextField(); Ok = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); Show = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); ShowResult = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); word.setText("文章を入力"); jButton1.setText("配列に格納"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); Ok.setText("OK"); Ok.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { OkActionPerformed(evt); } }); jLabel1.setText("で構いませんか?"); Show.setText("表示"); Show.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { ShowActionPerformed(evt); } }); ShowResult.setColumns(20); ShowResult.setRows(5); jScrollPane1.setViewportView(ShowResult); (文字数の都合でここにあったレイアウトに関する記述は削除しました) private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed word1 = word.getSelectedText(); SelectWord.setText(word1); } private void OkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_OkActionPerformed test[i] = SelectWord.getText(); ++i; }//GEN-LAST:event_OkActionPerformed private void ShowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ShowActionPerformed for(int j=0;j<i;j++){ ShowResult.setText(ShowResult.getText()+test[j]+"\n"); } } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new sample11().setVisible(true); } }); } private javax.swing.JButton Ok; private javax.swing.JTextField SelectWord; private javax.swing.JButton Show; private javax.swing.JTextArea ShowResult; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextField word; // End of variables declaration }

    • ベストアンサー
    • Java
  • main()メソッドが無いコード

    最近、Javaアプレット等を勉強してるのですが 今まではmain()メソッドの中に処理を書いて来たのですが、 下記の様なコードにはmain()メソッドが有りません。 import java.applet.Applet; import java.awt.Button; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class Sample6 extends Applet implements ActionListener { Button bt; public void init() { bt = new Button("開始"); add(bt); bt.addActionListener(this); } public void actionPerformed(ActionEvent ae) { bt.setLabel("中止"); } } これはどう言う事なんでしょうか?

    • ベストアンサー
    • Java
  • Java バックグラウンドでキーを監視したい

    Swingを使用しています。ウィンドウにフォーカスが外れても、どのキーが押されたか判定できる方法を教えて下さい。 フォーカスがあっていれば、動作するプログラムは作れました。 import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class KeyListenerOnBackgroundTest extends JFrame implements KeyListener{ public KeyListenerOnBackgroundTest() { setSize(300, 200); setDefaultCloseOperation(EXIT_ON_CLOSE); addKeyListener(this); } public static void main(String[] args){ new KeyListenerOnBackgroundTest().setVisible(true); } @Override public void keyPressed(KeyEvent e) { // 文字とコードを表示する System.out.println(e.getKeyCode()+":"+e.getKeyChar()); } @Override public void keyReleased(KeyEvent e) {} @Override public void keyTyped(KeyEvent e) { } }

    • ベストアンサー
    • Java
  • event処理の初期化について

    クリックすると数字が1つづ増えていく処理はできるのですが、 別ボタンをクリックすると、最初の0に戻したいのですがどのようにすればいいのでしょうか・・ 仮に、b.setText("0");として0が表示できたとしても、そのあと上の増幅ボタンを押すとそれまで増えていた数から1ずつ増えてしまいます つまり、リセットする!というようなことをしたいのですが考え方も方法もわからないのです。どなたかご回答よろしくお願いいたします import java.awt.*; import java.awt.event.*; class click_a extends Frame{ Button a1,a2; Label b; Panel c; int d=0; click_a(){ setSize(300,300); setVisible(true); a1=new Button("ボタンを押すと数字が足し算されます"); a2=new Button("初期値に戻します"); b=new Label(""+d); c=new Panel(); c.setLayout(new GridLayout(3,1)); add(c); c.add(a1); c.add(a2); c.add(b); a1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ b.setText(""+d); d++; } }); a2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ b.setText("0"); } }); } public static void main(String[] args){ new click_a(); } }

    • ベストアンサー
    • Java
  • ボタン押したときにすでに表示されている画面の再表示を禁止したい。

    以下のプログラムで別画面の表示を行います。 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { JFrame re = new Set(); re.setVisible(true); } しかしこのプログラムではボタンを押す度に別画面を表示されてしまします。 同じ画面を開くことを禁止するにはどのようにすれば良いでしょうか?

  • TABキーの検出

    Swingコンポーネントで、TABキーのイベントを取得する 方法を教えてください。 タブキー以外は検出できるのですが… import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; import javax.swing.JPanel; public class TabKeyListener { public TabKeyListener() { JPanel panel = new JPanel(); panel.addKeyListener( new KeyListener(){ public void keyPressed(KeyEvent e) { System.out.println(e.getKeyCode()); } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } } ); JFrame frame = new JFrame(); frame.add(panel); frame.setBounds(100,100,200,200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); panel.requestFocusInWindow(); } public static void main(String[] args) { new TabKeyListener(); } }

    • ベストアンサー
    • Java
  • コンパイルエラーの対応

    下記のプログラムをコンパイルしたらエラーが発生しました。 プログラム自体は本をそのまま書き写したのですが、何がいけないのでしょう。 教えてください。よろしくお願いします。 Javaのバージョンは1.3.1です import java.applet.*; import java.awt.*; import java.awt.event.*; public class sample3 extends Applet implements ActionListener { Button bt; public void init() { bt = new Button("押します!"); bt.addActionListener(this); add(bt); } public void actionperformed(ActionEvent ae) { bt.setLabel("押しました!"); } } -----------------エラー内容----------------------- sample3.java:4: sample3 は abstract として宣言する必要があります。 actionPerformed(java.awt.event.ActionEvent) を sample3 で定義しません。 public class sample3 extends Applet implements ActionListener ^

    • ベストアンサー
    • Java
  • イベントの宣言について

    public class J_applet extends Applet implements ActionListener ,ItemListener { と宣言したところ、 J_applet は abstract でなく、java.awt.event.ActionListener 内の abstract メソッド actionPerformed(java.awt.event.ActionEvent) をオーバーライ ドしません。 とエラーがでました。 インポート宣言はきちんとしました。 上記のような書き方はもしかして出来ないんでしょうか?

    • ベストアンサー
    • Java