2

次のコードでActionListener2つに追加すると、問題が発生しました。JButtons

これらの2つのボタン(b1、b2)をクリックすると、1と2をそれぞれ印刷したい

しかし、私は1つか2つしか印刷できません。

この問題を解決するための解決策を教えてください。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class CCCc extends JFrame implements ActionListener{
    JButton b1,b2;
    JTextField f1;

CCCc(){
    setSize(500,200);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLocationRelativeTo(null);
    setResizable(false);
    f1=new JTextField();
    f1.setHorizontalAlignment(JTextField.RIGHT);
    add("North",f1);
    JPanel p1=new JPanel(new GridLayout(1,2));
    add(p1);

    b1=new JButton("1");    
    b1.addActionListener(this); 
    b2=new JButton("2");
    b2.addActionListener(this);
    p1.add(b1);
    p1.add(b2);

    setVisible(true);
}
public void actionPerformed(ActionEvent evt){
    String s=f1.getText();
    f1.setText(s+"1");
}
}
4

3 に答える 3

5

JFrameやなどのクラスを不必要にサブクラス化するのは悪い考えThreadです。インターフェイスを不適切に実装することも悪い考えです。source(第三に、イベントの を見ようとするのは悪い考えであり、commandも厄介です)

リスナーの匿名内部クラスに切り替えることをお勧めします。両方のボタンに共通のコードがあることに気付くでしょう。そのため、単一の内部クラスのみを必要とするメソッドに組み込むことができます。通常、「1」または「2」を保持する変数はfinal、匿名の内部クラスを囲むメソッドのローカル フィールドを介して参照されます。ただし、通常の方法でフィールドにアクセスする非匿名クラスを使用できます。

于 2013-01-12T04:02:00.567 に答える
2

getSource()ActionEventパラメータには、押されたボタンへの参照、または `getActionCommand()を介したボタンのテキストへの参照など、使用できる多くの有用な情報があります。したがって、ActionEventからactionCommandを取得して、それを使用するだけです。

public void actionPerformed(ActionEvent evt){
    String s=f1.getText();
    f1.setText(s+ evt.getActionCommand());
}
于 2013-01-12T03:56:43.227 に答える
1

あなたが知りたいのはJButton, ActionEventがトリガーされている場合です. もしそうなら, aをテキストフィールドb1に結合する必要があります else . 上記の場合は、次の手順を実行します。"1""2"

public void actionPerformed(ActionEvent evt){
JButton temp=evt.getSource();
String s=f1.getText()+temp.getText();
f1.setText(s);
}

上記に当てはまらない場合は、Sorryと言います

于 2013-01-12T04:09:48.313 に答える