簡體   English   中英

ActionListener已添加到JButton但不起作用

[英]ActionListener Added to JButton but Doesn't Work

用戶必須在文本字段中輸入數字。 當用戶按下Enter鍵時,該數字應從文本字段中刪除並添加到ArrayList中。當用戶單擊Calculate按鈕時,程序必須計算結果並將其投影到第二個文本字段中。當用戶單擊Reset時按鈕,必須刪除文本字段上的文本,並且必須清除ArrayList。 我將ActionListener添加到btnCalc,但是單擊它們時,TextField上沒有任何更改

  import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
  import java.awt.event.KeyEvent;
  import java.awt.event.KeyListener;
  import java.util.ArrayList;

  import javax.swing.ButtonGroup;
  import javax.swing.JButton;
  import javax.swing.JFrame;
  import javax.swing.JTextField;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.JRadioButton;

  public class AddMult extends JFrame implements KeyListener,     ActionListener{

private JLabel lblEnterNum;
private JTextField txtEnterNum;
private JRadioButton radBtnAdd;
private JRadioButton radBtnMul;
private JButton btnCalc;
private JButton btnReset;
private JLabel lblResult;
private JTextField txtResult;







public AddMult() {
    setSize(300, 300);



    lblEnterNum=new JLabel();
    lblEnterNum.setText("Enter a number:");

    lblEnterNum.setSize(100,20);
    lblEnterNum.setLocation(100, 20);
    add(lblEnterNum);
    lblEnterNum.setVisible(true);


    txtEnterNum = new JTextField();
    txtEnterNum.setSize(90,20);
    txtEnterNum.setLocation(105, 60);
    add(txtEnterNum);
    txtEnterNum.setVisible(true);
    txtEnterNum.addKeyListener(this);


    JRadioButton radBtnAdd = new JRadioButton();
    radBtnAdd.setText("Add");
    radBtnAdd.setSize(70,50);
    radBtnAdd.setLocation(80, 80);
    radBtnAdd.setSelected(true);
    add(radBtnAdd);


    JRadioButton radBtnMul = new JRadioButton();
    radBtnMul.setText("Multiply");
    radBtnMul.setSize(100,50);
    radBtnMul.setLocation(160, 80);
    add(radBtnMul);

    ButtonGroup group = new ButtonGroup();
    group.add(radBtnAdd);
    group.add(radBtnMul);

    btnCalc= new JButton();
    btnCalc.setText("Calculate");
    btnCalc.setLocation(70, 140);
    btnCalc.setSize(80, 40);
    add(btnCalc);


    btnReset=new JButton();
    btnReset.setText("Reset");
    btnReset.setLocation(180, 140);
    btnReset.setSize(60, 40);
    add(btnReset);


    JLabel lblResult =new JLabel();
    lblResult.setText("Result:");
    lblResult.setLocation(95, 200);
    lblResult.setSize(70, 40);
    add(lblResult);


    JTextField txtResult = new JTextField();
    txtResult.setLocation(150, 205);
    txtResult.setSize(70,30);
    txtResult.setEditable(false);
    add(txtResult);

    btnCalc.addActionListener(this);
    btnReset.addActionListener(this);

    setLayout(null);
    setVisible(true);
    setResizable(false);



    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

public static void main(String[] args) {
    // TODO Auto-generated method stub
AddMult test = new AddMult();
}
ArrayList<Integer> list = new ArrayList<Integer>();
public void addList() {

    int num = Integer.parseInt(txtEnterNum.getText().trim());
    list.add(num);
    txtEnterNum.setText("");


}

public String sum() {
    int total=0;
    for (int i = 0; i < list.size(); i++) {
        total=total+list.get(i);
    }
    return total + "";
}

public String mult() {
    int mult=1;
    for (int i = 0; i < list.size(); i++) {
        mult=mult*list.get(i);
    }
    return mult+"";
}

@Override
public void actionPerformed(ActionEvent a) {

    // TODO Auto-generated method stub
    String sum =sum();
    String mult=mult();

    if(btnCalc.equals(a.getSource())) {
    if (radBtnAdd.isSelected()) {

        txtResult.setText(sum);
    }
    else if (radBtnMul.isSelected()) {

        txtResult.setText(mult);
    }


    }
    else if (btnReset.equals(a.getSource())) {
        txtEnterNum.setText("");
        txtResult.setText("");
        list.clear();
    }

}

@Override
public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
    if(e.getKeyCode()==e.VK_ENTER) {
        addList();
    }
    else if(e.getKeyCode()==e.VK_ESCAPE)
        System.exit(1);
}

@Override
public void keyReleased(KeyEvent arg0) {
    // TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent arg0) {
    // TODO Auto-generated method stub

}
}

因為您創建了btnCalc兩次。 請刪除此代碼:

JButton btnCalc = new JButton();

和寫:

private JButton btnCalc = new JButton();

之后:

btnCalc.equals(a.getSource())

將返回true。

初始化btnCalc和btnReset時,請勿像這樣重新聲明它們:

JButton button;

void foo(){
    JButton button = new JButton();
 }

而是這樣的:

JButton button;

void foo(){
    button = new JButton();
 }

另外,在您的動作偵聽器中,不要將按鈕的名稱測試為字符串,而是將按鈕與對象相等:

actionEvent.getSource().equals(btnReset);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM