刚学完JavaSE,于是就自己用Java编写了一个GUI的简易计算器小程序。希望能够帮助大家

本程序主要用到了Java中的awt和swing包下的各种组件完成图形界面的设计,通过内部类的形式实现数据的运算操作,初步的只定义加减乘除四种运算,读者可以根据自己的需求按照本文的例子可以自己添加其他的运算。同时为了方便运算本程序中还添加了一个清零的按钮,用于清空显示区中的数据内容。



CalculatorPanel类访问了,后来就想到了内部类,于是直接将他们定义成了内部类,并且用private修饰,既保证了运算的安全性有保证了数据的正常访问。


代码如下:


public class CalculatorPanel extends JPanel 

 

  { 

 

  private JPanel jp;//中间的面板 

 

  private double result;//计算结果 
 
 

   private boolean start;//用于判断是否是首次输入 
 
 private boolean flag;//用于判断是否清空显示区的值 
 
 private String lastCommand;//用于保存运算符 
 
 JButton display;//显示区域 
 

  /** 

构造方法: 

  */ 
 
 public CalculatorPanel() 
 
 { 
 
  //初始化个项值 
 
  result = 0; 
 
  start = true; 
 
  flag = false; 
 
  lastCommand = "="; 
 
   
 
  //设置CalculatorPanel面板的布局为框架布局 
 
  setLayout(new BorderLayout()); 
 
   
 
  //这个按钮用来显示值的区域 
 
  display = new JButton("0.0"); 
 
  display.setEnabled(false);//按钮样式设置为禁用样式 
 
   
 
  //用来初始化,清除用的 
 
  JButton clear = new JButton("清零"); 
 
  clear.addActionListener(new ActionListener() { 
 
    
 
   @Override 
 
   public void actionPerformed(ActionEvent e) { 
 
    // 初始化的操作 
 
    result = 0; 
 
    start = true; 
 
    flag = false; 
 
    lastCommand = "="; 
 
    display.setText("0.0"); 
 
   } 
 
  }); 
 
   
 
  jp = new JPanel(); 
 
  //将面板设置为网格布局,4行4列 
 
  jp.setLayout(new GridLayout(4, 4)); 
 
   
 
  //实例化监听对象 
 
  NumberAction na = new NumberAction(); 
 
  CommandAction ca = new CommandAction(); 
 
   
 
  makeButton("7",na); 
 
  makeButton("8",na); 
 
  makeButton("9",na); 
 
  makeButton("/",ca); 
 
   
 
  makeButton("4",na); 
 
  makeButton("5",na); 
 
  makeButton("6",na); 
 
  makeButton("*",ca); 
 
   
 
  makeButton("1",na); 
 
  makeButton("2",na); 
 
  makeButton("3",na); 
 
  makeButton("-",ca); 
 
   
 
  makeButton("0",na); 
 
  makeButton(".",na); 
 
  makeButton("+",ca); 
 
  makeButton("=",ca); 
 
   
 
  //将面板和两个按键加入到主界面,实现计算器的界面 
 
  add(display,BorderLayout.NORTH); 
 
  add(jp,BorderLayout.CENTER); 
 
  add(clear,BorderLayout.SOUTH); 
 
   
 
 } 
 
  
 
 private void makeButton(String buttonName,ActionListener al) 
 
 { 
 
  JButton jb = new JButton(buttonName); 
 
  jp.add(jb); 
 
  jb.addActionListener(al); 
 
   
 
 } 
 
  
 
 //数字监听器 
 
 private class NumberAction implements ActionListener{ 
 

    @Override 
 
  public void actionPerformed(ActionEvent e) { 
 
   // TODO Auto-generated method stub 
 
   JButton jb = (JButton)e.getSource();//获取事件源对象 
 
   String input = jb.getText();//获取事件源上的标签 
 
   if(start)//首次输入 
 
   { 
 
    //一开始输入为".",就什么也不做 
 
    if(input.equals(".")) 
 
    { 
 
     return ; 
 
    } 
 
     
 
    //如果是"0.0", 就清空 
 
    if(display.getText().equals("0.0")) 
 
    { 
 
     display.setText(" "); 
 
    } 
 
     
 
    start = false;//改变是否首次输入的标记值 
 
   } 
 
   else 
 
   { 
 
    //判断显示区域的值里是否已经有".", 如果有,输入的又是".",就什么也不做 
 
    if(display.getText().indexOf(".")!=-1) 
 
    { 
 
     if(input.equals(".")) 
 
     { 
 
      return ; 
 
     } 
 
    } 
 
    //判断显示区域的值里只有"-",输入的又是".",就什么也不做 
 
    if(display.getText().equals("-")) 
 
    { 
 
     if(input.equals(".")) 
 
     { 
 
      return ; 
 
     } 
 
    } 
 
    //判断显示区域的值如果是"0",输入的不是".",就什么也不做 
 
    if(display.getText().equals("0")) 
 
    { 
 
     if(!input.equals(".")) 
 
     { 
 
      return ; 
 
     } 
 
    } 
 
   } 
 
   //如果单击了运算符以后再输入数字的话,就要清空显示区域的值 
 
   if(flag) 
 
   { 
 
    display.setText(""); 
 
    flag = false;//还原初始值,不需要清空 
 
   } 
 
   display.setText(display.getText()+input);//设置显示区域的值 
 
  } 
 
 } 
 
 //运算符监听器 
 
 public class CommandAction implements ActionListener 
 
 { 
 

    @Override 
 
  public void actionPerformed(ActionEvent e ) { 
 
   // TODO Auto-generated method stub 
 
   JButton jb = (JButton)e.getSource(); 
 
   String inputCommand = jb.getText(); 
 
    
 
   if(start) 
 
   { 
 
    if(inputCommand.equals("-")) 
 
    { 
 
     display.setText("-"); 
 
     start = false; 
 
    } 
 
   } 
 
   else 
 
   { 
 
    if(!flag) 
 
    { 
 
     calculate(Double.parseDouble(display.getText())); 
 
    } 
 
    lastCommand = inputCommand; 
 
    flag = true; 
 
   } 
 
  } 
 
 } 
 

    private void calculate(double x) { 
 
   // TODO Auto-generated method stub 
 
   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); 
 
  } 
 
   
 
}



第二步:定义MyFrameUitl类对主题窗口的规格进行设置


代码如下:


public class MyFrameUitl { 

 

   public static void init(JFrame jFrame,Dimension frameSize,String title,String iconFileName,boolean resizable) 
 
 { 
 
  // TODO Auto-generated method stub 
 
  Toolkit tk = Toolkit.getDefaultToolkit(); 
 
  Dimension screenSize = tk.getScreenSize(); 
 
  //获取宽和高 
 
  int screenWidth = screenSize.width; 
 
  int screenHeight = screenSize.height; 
 
   
 
  //找中心点 
 
  int centerX = screenWidth/2; 
 
  int centerY = screenHeight/2; 
 
   
 
  int frameHeight = frameSize.height; 
 
  int frameWidth = frameSize.width; 
 
  //设置窗体位置 
 
  jFrame.setBounds(centerX-frameWidth/2,centerY-frameHeight/2,frameWidth,frameHeight); 
 
  //设置标题 
 
  jFrame.setTitle(title); 
 
  if(iconFileName!=null) 
 
  { 
 
   jFrame.setIconImage(tk.getImage(iconFileName));//设置图标 
 
  } 
 
  //设置皮肤外观为所使用的平台外观 
 
  try 
 
  { 
 
   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
 
   SwingUtilities.updateComponentTreeUI(jFrame); 
 
    
 
  } 
 
  catch(Exception el) 
 
  { 
 
   el.printStackTrace(); 
 
  } 
 
   
 
  jFrame.setResizable(resizable);//设置窗体是否可以改变大小 
 
  jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置程序关闭动作 
 
  jFrame.setVisible(true); 
 
 } 
 

  }


CalculatorFrame类继承自JFrame类,在该类的构造方法中利用add方法添加第一步 CalculatorPanel类的对象


    由于本程序中该对象只用一次,因此采用匿名对象的方式实现。


public class CalculatorFrame extends JFrame{ 
 
 public CalculatorFrame() { 
 
  add(new CalculatorPanel()); 
 
  MyFrameUitl.init(this,new Dimension(400,300),"简易计算器",null,true); 
 
  this.pack(); 
 
 } 
 
} 
 
CalculatorTest类,这里就不用多说了吧,好了,剩下的大家应该懂懂的。 

 
 
public class CalculatorTest {
 public static void main(String[] args) {
  new CalculatorFrame();
 }
}





java计算器界面 java计算器界面图片_监听器