⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 awtcalc.java

📁 java设计的记数器
💻 JAVA
字号:

package test;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics;

public class AwtCalc extends Frame implements ActionListener
{

  private Button[]    buttons = new Button[19];
  private String[]    buttonText = { " 1 " , " 2 ", " 3 ", " + ", " - ",
                                      " 4 ", " 5 ", " 6 ", " x ", " / ",
                                      " 7 ", " 8 ", " 9 ", "^ ", "sqrt",
                                      " C ", " 0 ", " . ", "    =    "};

  private ETextField   result;       // 结果显示框
  private String      input = "";    // 用户的输入
  private Label       label;
  private Color       forecolor,     // 前景色
                      backcolor,      // 背景色
                      fieldcolor;     // 显示框颜色
  private Font        font,
                      buttonfont;
  private int         oper = 0,     // 记录运算过程中的运算符
                      oldoper = 0,
                      newoper = 0;
  private double      answer,
                      num1 = 0.0,
                      num2 = 0.0,
                      num3 = 0.0;
  private final int   ADD=1,        // 用于记录运算符的常量
                      SUB = 2,
                      MULT = 3,
                      DIVI = 4,
                      POW = 5,
                      SQRT = 6;
 private boolean      firstpress = true,  //是否按下第一个按键
                      morenums = false,      //是否多个数值被输入
                      equals = false,        //等于是否已经被按下
                      clearscreen = false,   //是否清屏
                      decnumber = false,     //是否输入一个浮点数
                      doubleclick = false;   //是否双击

public AwtCalc(){
    super("计算器");

    //初始化颜色
    buttonfont = new Font( "Courier", Font.PLAIN, 12 );
    setBackground( Color.lightGray );

    result = new ETextField( 125, 18 );
    font = new Font( "宋体", Font.ITALIC, 10 );
    label = new Label( "结果" );
    label.setFont( font );
    result.setBackground( Color.white );
    setLayout( new FlowLayout() );

    //初始化按钮
    Panel mainPanel=new Panel();
    mainPanel.setLayout(new GridLayout(5,1));
    for ( int i = 0; i < 19; i++ ) {
       buttons[i] = new Button( buttonText[i] );
       buttons[i].setFont( buttonfont );
       buttons[i].addActionListener( this );
    }

    Panel panel1=new Panel();
    panel1.add( result );
    panel1.add( label );
    mainPanel.add(panel1);

    Panel panel2=new Panel();
    panel2.add(buttons[0]);
    panel2.add(buttons[1]);
    panel2.add(buttons[2]);
    panel2.add(new Label( "  " ));
    panel2.add(buttons[3]);
    panel2.add(buttons[4]);
    mainPanel.add(panel2);

    Panel panel3=new Panel();
    panel3.add(buttons[5]);
    panel3.add(buttons[6]);
    panel3.add(buttons[7]);
    panel3.add(new Label( "  " ));
    panel3.add(buttons[8]);
    panel3.add(buttons[9]);
    mainPanel.add(panel3);

    Panel panel4=new Panel();
    panel4.add(buttons[10]);
    panel4.add(buttons[11]);
    panel4.add(buttons[12]);
    panel4.add(new Label( "  " ));
    panel4.add(buttons[13]);
    panel4.add(buttons[14]);
    mainPanel.add(panel4);

    Panel panel5=new Panel();
    panel5.add(buttons[15]);
    panel5.add(buttons[16]);
    panel5.add(buttons[17]);
    panel5.add(new Label( "  " ));
    panel5.add(buttons[18]);
    mainPanel.add(panel5);

    add("Center",mainPanel);




   buttons[15].setForeground( Color.red );


   resize(235,210);
   show();
}


//==============================================================================
// 处理按钮被按下时的动作,进行相应的处理
//==============================================================================
public void actionPerformed( ActionEvent e )
{

  // 判断是否按下一个运算符键
  if (    e.getSource() != buttons[3] && e.getSource() != buttons[4]
       && e.getSource() != buttons[8] && e.getSource() != buttons[9]
       && e.getSource() != buttons[13] && e.getSource() != buttons[14]
       && e.getSource() != buttons[15] && e.getSource() != buttons[18] ) {
      //按下一个数字键
     if ( clearscreen ) {       // 在完成一次运算后再次按下运算符之前清屏
         clearScreen();
         clearscreen = false;
     }

     if ( e.getSource() == buttons[0] ) {
        input += "1";                     // 输入为"1"
        result.setText( input );
        showAnswer( input );
     } // end else if

     else if ( e.getSource() == buttons[1] ) {
        input += "2";                     // 输入为"2"
        showAnswer( input );
     } // end else if

     else if ( e.getSource() == buttons[2] ) {
        input += "3";                     // 输入为"3"
        showAnswer( input );
     }  // end else if

     else if ( e.getSource() == buttons[5] ) {
        input += "4";                     // 输入为"4"
       showAnswer( input );
     } // end else if

     else if ( e.getSource() == buttons[6] ) {
        input += "5";                      // 输入为"5"
        showAnswer( input );
     }  // end if

     else if ( e.getSource() == buttons[7] ) {
        input += "6";                      // 输入为"6"
        showAnswer( input );
     }  // end else if

     else if ( e.getSource() == buttons[10] ) {
        input += "7";                      // 输入为"7"
        showAnswer( input );
     }  // end else if

     else if ( e.getSource() == buttons[11] ) {
        input += "8";                      // 输入为"8"
        showAnswer( input );
     }  // end else if

     else if ( e.getSource() == buttons[12] ) {
        input += "9";                      // 输入为"9"
        showAnswer( input );
     }  // end else if

     else if ( e.getSource() == buttons[16] ) {
        input += "0";                      // 输入为"0"
        showAnswer( input );
     } // end else if

     else if ( e.getSource() == buttons[17] ) {
       if ( decnumber == false ) {
            //设置输入为浮点数
            decnumber = true;
        input += ".0";                         // 输入为小数点
        showAnswer( input );
     }
    }
  } // end if

  // 检查是否按下加法按钮
  if ( e.getSource() == buttons[3] ) {
        clearscreen = false;
        decnumber = false;
        oper = ADD;                   // 将运算符设置为加
        clickCheck( input );          // 检查是否为双击运算符
      if ( doubleclick == false )
         processNumbers();            // 如果没有双击,继续处理
         input = "";                  // 记录输入值的变量清空
      }  // end  if

  // 检查是否按下减法按钮
  else if (e.getSource() == buttons[4] ) {
      clearscreen = false;
      decnumber = false;
      oper = SUB;                    // 将运算符设置为减
      clickCheck( input );           // 检查是否为双击运算符
      if ( doubleclick == false )
        processNumbers();            // 如果没有双击,继续处理
        input = "";                  // 记录输入值的变量清空
      } // end else if

  // 检查是否按下乘法按钮
  else if (e.getSource() == buttons[8] ) {
      clearscreen = false;
      decnumber = false;
      oper = MULT;                   // 将运算符设置为乘法
      clickCheck( input );           // 检查是否为双击运算符
      if ( doubleclick == false )
        processNumbers();            // 如果没有双击,继续处理
        input = "";                  // 记录输入值的变量清空
      } //end else if

  // 检查是否按下除法按钮
  else if (e.getSource() == buttons[9] ) {
      clearscreen = false;
      decnumber = false;
      oper = DIVI;                   // 将运算符设置为除法
      clickCheck( input );           // 检查是否为双击运算符
      if ( doubleclick == false )
        processNumbers();            // 如果没有双击,继续处理
        input = "";                  // 记录输入值的变量清空
      }  // end else if

  // 检查是否按下幂运算按钮
  else if ( e.getSource() == buttons[13] ) {
      clearscreen = false;
      decnumber = false;
      oper = POW;                    // 将运算符设置为幂
      clickCheck( input );           // 检查是否为双击运算符
      if ( doubleclick == false )
        processNumbers();            // 如果没有双击,继续处理
        input = "";                  // 记录输入值的变量清空
      }  // end else if

  // 检查是否按下开方运算按钮
  else if ( e.getSource() == buttons[14] ) {
      clearscreen = false;
      oper = SQRT;                    // 将运算符设置为开方
      clickCheck( input );            // 检查是否为双击运算符
      if ( doubleclick == false )
        processNumbers();             // 如果没有双击,继续处理
        input = "";                   // 记录输入值的变量清空
      }  // end else if

  // 检查是否按下清零按钮
  if (e.getSource() == buttons[15] ) {
       clearScreen();
      }  // end if

  // 检查是否按下等于按钮
  if (e.getSource() == buttons[18] ) {
       equals = true;
       clearscreen = true;
       clickCheck( input );             //检查是否为双击运算符
     if ( doubleclick == false )
        processNumbers();                   //如果没有双击,继续处理
        input = Double.toString( answer );
    } // end if

   }  // end actionPerformed()

//==============================================================================
//该方法处理用户的这种输入
//==============================================================================
public void processNumbers() {

  // 判断运算符是否被第一次按下
  if ( firstpress ) {
     if ( equals ) {
        num1 = answer;     //结果被保存
        equals = false;   //等待另外的输入
     } // end if
    else
      num1 = Double.valueOf( input ).doubleValue();

      oldoper =  oper;                  // 将当前运算符保存

    // 如果进行开方运算
    if ( oper == SQRT ) {
      answer = calculate( oldoper, num1, 0.0 );
      showAnswer( Double.toString( answer ) );
      morenums = true;
    }
      firstpress = false;
  }  // end if

  else if ( !morenums ) {

      num2 = Double.valueOf( input ).doubleValue();
      answer = calculate( oldoper, num1, num2 );
      showAnswer( Double.toString( answer) );
      newoper = oper;

      if ( !equals )
        morenums = true;                         //标识已经有至少两个数值被输入
      else {
        morenums = false;       //如果等号被按下, firstpress将被置为true
        firstpress = true;
    } // end else
    } // end if


    else if (morenums) {
       //输入多个数值
      if ( equals ) {
        newoper = oper;
        morenums = false;
        firstpress = true;
    } // end if

      num3 = Double.valueOf( input ).doubleValue();
      answer = calculate( newoper, answer, num3 );
      showAnswer( Double.toString(answer) );

      newoper = oper;
   }  // end else if
}  // end processNumbers()

//==============================================================================
//该方法用于根据输入的数值或运算符进行计算
//==============================================================================
public double calculate( int oper, double number1, double number2 )
{
   double answer = 0.0;

        switch( oper ) {
          case ADD:
            answer = number1 + number2;
            break;
          case SUB:
            answer = number1 - number2;
            break;
          case MULT:
            answer = number1 * number2;
            break;
          case DIVI:
            answer = number1 / number2;
            break;
          case POW:
            answer = Math.pow( number1, number2 );
            break;
          case SQRT:
            answer = Math.sqrt( number1 );
            break;
      } // end switch

     return answer;
  }  // end calculate()

//==============================================================================
//该方法用于将计算的结果输出到结果框中
//==============================================================================
public void showAnswer( String s )
{
    double answer;

    answer = Double.valueOf(s).doubleValue();
    if ( decnumber )
    result.setText( Double.toString(answer) );
    else
    result.setText( s );

} // end showAnswer

//==============================================================================
//该方法检查是否双击运算符
//==============================================================================
public boolean clickCheck( String s ) {
  if ( s == "" )
    doubleclick = true;
  else
    doubleclick = false;

  return doubleclick;
}

//==============================================================================
//清屏
//==============================================================================
public void clearScreen()
{
        oper = 0;                    // 初始化各个变量
        input = "";
        answer = 0;
        decnumber = false;
        morenums = false;
        firstpress = true;
        equals = false;
        showAnswer( Integer.toString( (int)answer) );
}

public void paint( Graphics g )
{
    //绘制边界
    g.drawRect( 0, 0, size().width - 1, size().height - 1 );
    g.drawLine( 0, 0, 0, size().height );
}
public static void main(String[] args){

     AwtCalc ca=new AwtCalc();
  }
} // end program

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -