2011-09-14 5 views
0

の外Iアクションがメイン実行中のactionPerformedライト(の違いは何である)、またはメイン

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
// TODO add your handling code here: 
    jTextField1.setText("do something"); 
} 

の外のようなコードを実行し、それが(実行で書くことができる)

 jButton1.addActionListener(new java.awt.event.ActionListener(){ 


      public void actionPerformed(ActionEvent e) { 
       jTextField1.setText("aaaaaaaaaa"); 
      } 
     }); 
ように書きます

この2つの違いは何か、プログラミング上のオーバーヘッドに関連する問題かどうか、より良いコーディングスタイルです。

私はrun()で書くときにnetbeansを使用しています.jTextField1を静的にする必要がありますmain mathodは静的ですので、プログラムがstoped.amになるまでメモリを占有するため、 ?

2.if私はすべてのボタンのアクションが別のクラスに書き込まれていることを望んでいますが、どうすればスイングフォームでこれを実装できますか?

+0

'run()'メソッドのクラス? 'Runnable'、' Thread'など何か? – Mohayemin

答えて

0

メインをできるだけ小さくして、コンストラクタとsetVisible(true)の呼び出しに減らしてください。

public void run() { 
     new NewJFrame().setVisible(true); 
    } 

これは、他のアプリケーションでクラスを再利用する必要があるためです。 Netbeansのレイアウトを維持しながら、クラス内のすべてのウィジェットを作成する方が良いでしょう。

2番目のオプションを使用し、thisを使用する必要がある場合は、クラスが拡張しているSwingウィジェットではなく、ActionListenerを参照します。別のクラスであなたのActionListenerを置くために

このようなクラス作り:そのような)(

public class AListener implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 
     if (e.getActionCommand().equals("B1")) 
      JOptionPane.showMessageDialog(null, "B1 clicked!"); 
     else if (e.getActionCommand().equals("B2")) 
      JOptionPane.showMessageDialog(null, "B2 clicked!"); 
    } 

} 

をし、NBのinitComponents後コンストラクタに、ボタンにActionListenerを追加します。

public NewJFrame() { 
    initComponents(); 
    ActionListener al = new AListener(); 
    jButton1.addActionListener(al); 
    jButton2.addActionListener(al); 
} 

これを行うには、ボタンごとに適切なsetActionCommand文字列を追加する必要があります。

jButton1.setActionCommand("B1"); 
    jButton2.setActionCommand("B2"); 

Netbeansでは、すべてのボタンの作成後コードを、想定されている文字列を含むように変更すると、簡単に行うことができます。

「通常の」ケース(60個のボタンがない場合)では、依然として標準に固執する方が良いと思います。アプリケーションをどのように設計するかは趣味の問題です。

ほとんどの場合、アプリケーションのアクションは、クラスのローカルなデータの詳細を共有する必要があります。その情報を明示的にAListenerに渡さないようにするには、thisを使用できるようにするには、使用しているクラスの中にActionListenersをまとめてください。

+0

しかし、私は非常に多くのボタンを持っていて、すべてのボタンが異なるアクションを持っていれば、クリスタルのようにはっきりしません。クラスのような多くのaListnerを作成し、すべてのクラスにactionPerformed()メソッドを定義します。それはnewJFrameのコンストラクタで、またはrun()で定義します。 –

+0

多くのボタンがある場合でも、1つのActionListenerを使用できますが、public void setActionCommand(String command)とpublic String getActionCommand(String command)の使用に役立ちます。Netbeansのインストールが完了した後で私の答えにサンプルを追加します: –

+0

1つのActionListenerクラスで2つのボタンをサポートするように上記の例を変更しました。私はあなたがメインランニングの中で物事を定義することについてもっと忘れてはならないと思います。コードの再利用性だけで十分です。また、すべてを静的として定義する必要があると考えてください。 –

関連する問題