【发布时间】:2017-12-16 19:46:41
【问题描述】:
我是 Java Swing 的初学者。我试图创建一个只有 + 和 - 的简单计算器。我使用 JButtons 来表示“+”和“-”,并添加了 actionListener 来响应每个按钮。但是,我真的不明白为什么 e.getSource() 不起作用。是动态调度问题吗?非常感谢您的帮助!
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.*;
import javax.swing.*;
class MenuExample implements ActionListener {
// JMenu menu1, menu2, menu3;
// JMenuItem i1, i2, i3, i4, i5;
JTextArea t1, t2;
JTextField t3;
JButton b1, b2;
MenuExample() {
JFrame f = new JFrame("Menu and MenuItem EX");
final JButton b1 = new JButton("+");
final JButton b2 = new JButton("-");
t3 = new JTextField();t3.setBounds(50, 350, 200, 30); t3.setEditable(false);
t1 = new JTextArea(); t1.setBounds(50,100,200,30);
t2 = new JTextArea(); t2.setBounds(50,250,200,30);
b1.addActionListener(this);
b2.addActionListener(this);
b1.setBounds(50, 450, 30, 30); b2.setBounds(100, 450, 30, 30);
f.add(b1); f.add(b2);f.add(t1); f.add(t2); f.add(t3);
f.setSize(800, 800);
f.setLayout(null);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
JButton button;
int answer=0;
String s1 = t1.getText();
String s2 = t2.getText();
int a = Integer.parseInt(s1);
int b = Integer.parseInt(s2);
Object source = e.getSource();
if (source instanceof JButton) {
button = (JButton) source;
System.out.println("called here at least?");
System.out.println(button.getClass());
if (button == b1) {
answer = a + b;
}
else if (button == b2) {
answer = a - b;
}
}
String result = String.valueOf(answer);
t3.setText(result);
}
}
public class JMenuPractice {
public static void main (String[] args) {
new MenuExample();
}
}
【问题讨论】: