首页>代码>JAVA.2核心技术.第1卷:基础知识(原书第7版) 源代码>/JAVA.2核心技术.第1卷:基础知识(原书第7版) 源代码/v1ch10/AppletApplication/CalculatorApplet.java
/**
   @version 1.31 2004-05-07
   @author Cay Horstmann
*/

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

public class CalculatorApplet extends JApplet
{  
   public void init()
   {  
      add(new CalculatorPanel());
   }
}

/**
   A panel with calculator buttons and a result display.
*/
class CalculatorPanel extends JPanel
{  
   public CalculatorPanel()
   {  
      setLayout(new BorderLayout());

      result = 0;
      lastCommand = "=";
      start = true;
      
      // add the display

      display = new JLabel("0");
      add(display, BorderLayout.NORTH);
      
      ActionListener insert = new InsertAction();
      ActionListener command = new CommandAction();

      // add the buttons in a 4 x 4 grid

      panel = new JPanel();
      panel.setLayout(new GridLayout(4, 4));

      addButton("7", insert);
      addButton("8", insert);
      addButton("9", insert);
      addButton("/", command);

      addButton("4", insert);
      addButton("5", insert);
      addButton("6", insert);
      addButton("*", command);

      addButton("1", insert);
      addButton("2", insert);
      addButton("3", insert);
      addButton("-", command);

      addButton("0", insert);
      addButton(".", insert);
      addButton("=", command);
      addButton("+", command);

      add(panel, BorderLayout.CENTER);
   }

   /**
      Adds a button to the center panel.
      @param label the button label
      @param listener the button listener
   */
   private void addButton(String label, ActionListener listener)
   {  
      JButton button = new JButton(label);
      button.addActionListener(listener);
      panel.add(button);
   }

   /**
      This action inserts the button action string to the
      end of the display text.
   */
   private class InsertAction implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {
         String input = event.getActionCommand();
         if (start) 
         {
            display.setText("");
            start = false;
         }
         display.setText(display.getText() + input);
      }
   }

   /**
      This action executes the command that the button
      action string denotes.
   */
   private class CommandAction implements ActionListener
   {
      public void actionPerformed(ActionEvent event)
      {  
         String command = event.getActionCommand();

         if (start)
         {  
            if (command.equals("-")) 
            { 
               display.setText(command); 
               start = false; 
            }
            else 
               lastCommand = command;
         }
         else
         {  
            calculate(Double.parseDouble(display.getText()));
            lastCommand = command;
            start = true;
         }
      }
   }

   /**
      Carries out the pending calculation. 
      @param x the value to be accumulated with the prior result.
   */
   public void calculate(double x)
   {
      if (lastCommand.equals("+")) result += x;
      else if (lastCommand.equals("-")) result -= x;
      else if (lastCommand.equals("*")) result *= x;
      else if (lastCommand.equals("/")) result /= x;
      else if (lastCommand.equals("=")) result = x;
      display.setText("" + result);
   }
   
   private JLabel display;
   private JPanel panel;
   private double result;
   private String lastCommand;
   private boolean start;
}


最近下载更多
linmou  LV8 2023年3月19日
徐寿亮  LV1 2021年4月21日
xcj456  LV8 2020年9月12日
szy2503  LV2 2020年8月10日
moomin709  LV24 2020年2月19日
wsk588  LV26 2020年1月15日
ak130112  LV1 2019年12月31日
jizhaojian88  LV11 2019年8月20日
czh0510  LV12 2019年3月26日
罗颖钊  LV3 2018年12月6日
最近浏览更多
linmou  LV8 2023年3月19日
徐寿亮  LV1 2021年4月21日
高欢胜  LV1 2021年3月29日
2196316269  LV10 2021年2月24日
13043860zj  LV16 2020年9月24日
xcj456  LV8 2020年9月12日
szy2503  LV2 2020年8月10日
16692039904  LV2 2020年6月25日
fighter919  LV1 2020年5月6日
hb2008  LV3 2020年4月25日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友