import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exercise15_4 extends JFrame implements ActionListener { // 设置文本区域 private JTextField jtfNum1, jtfNum2, jtfResult; // 定义按钮 private JButton jbtAdd, jbtSub, jbtMul, jbtDiv; public static void main(String[] args) { Exercise15_4 frame = new Exercise15_4(); frame.pack(); frame.setTitle("Exercise13_4"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public Exercise15_4() { //设置文本区和标签的面板 JPanel p1 = new JPanel(); p1.setLayout(new FlowLayout()); p1.add(new JLabel("Number 1")); p1.add(jtfNum1 = new JTextField(3)); p1.add(new JLabel("Number 2")); p1.add(jtfNum2 = new JTextField(3)); p1.add(new JLabel("Result")); p1.add(jtfResult = new JTextField(8)); jtfResult.setEditable(false); jtfResult.setHorizontalAlignment(SwingConstants.RIGHT); // 设置按钮面板 JPanel p2 = new JPanel(); p2.setLayout(new FlowLayout()); p2.add(jbtAdd = new JButton("Add")); p2.add(jbtSub = new JButton("Subtract")); p2.add(jbtMul = new JButton("Multiply")); p2.add(jbtDiv = new JButton("Divide")); //设置热键 jbtAdd.setMnemonic('A'); jbtSub.setMnemonic('S'); jbtMul.setMnemonic('M'); jbtDiv.setMnemonic('D'); //将面板添加到框架 getContentPane().setLayout(new BorderLayout()); getContentPane().add(p1, BorderLayout.CENTER); getContentPane().add(p2, BorderLayout.SOUTH); // 注册监听器 jbtAdd.addActionListener(this); jbtSub.addActionListener(this); jbtMul.addActionListener(this); jbtDiv.addActionListener(this); } //设置监听器 public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand(); //监听按钮事件 if (e.getSource() instanceof JButton) { if ("Add".equals(actionCommand)) calculate('+'); else if ("Subtract".equals(actionCommand)) calculate('-'); else if ("Multiply".equals(actionCommand)) calculate('*'); else if ("Divide".equals(actionCommand)) calculate('/'); } } //设置运算方法 private void calculate(char operator) { //获取数字并转化成数值进行运算 double num1 = new Double(jtfNum1.getText().trim()).doubleValue(); double num2 = new Double(jtfNum2.getText().trim()).doubleValue(); double result = 0; switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; } jtfResult.setText(String.valueOf(result)); } }