import java.awt.BorderLayout;//做两个控件之间的间隙的 import java.awt.Color; import java.awt.GridBagLayout;//准备做网格用的 import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.GridLayout;//把中间容器设置为几行几式 import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import java.awt.color.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class jisuanji extends JFrame implements ActionListener{ //---------------菜单项------------------------------------- JMenuBar bar=new JMenuBar();//菜单项 JMenu JMenu_bj=new JMenu("编辑");//三个主菜单 JMenu JMenu_ck=new JMenu("查看"); JMenu JMenu_bz=new JMenu("帮助"); //--------------------------------------------------------- JMenuItem JMenuItem_fz=new JMenuItem("复制"); JMenuItem JMenuItem_zt=new JMenuItem("粘贴"); JMenuItem JMenuItem_bz=new JMenuItem("标准型"); JMenuItem JMenuItem_kx=new JMenuItem("科学型"); JMenuItem JMenuItem_bzzt=new JMenuItem("帮助主题"); JMenuItem JMenuItem_gy=new JMenuItem("关于计算器"); //------------------------------------------------------------- JPanel JPanel_west=new JPanel(); //----------------------------------------------------------- String []s2=new String[]{"","MC","MR","MS","M+"}; //--------------------------------------- JPanel JPanel_center=new JPanel();//准备做为中间的容器,会再次进行分解 JPanel JPanel_north2=new JPanel(); JPanel JPanel_center2=new JPanel(); //--------------------------------------- String []s1=new String[]{"Backspace","CE","C"}; JTextField JTextField_user=new JTextField(30); public jisuanji() { super("xjh_计算器"); jmenu(); this.setLayout(new BorderLayout(5,5));//间隙 text_north(); west_JButton(); center2_njb(); } public void jmenu() { this.setJMenuBar(bar);//把菜单项添加到窗体上 bar.add(JMenu_bj);//把三个主菜单添加到菜单项上 bar.add(JMenu_ck); bar.add(JMenu_bz); JMenu_bj.add(JMenuItem_fz);//把子菜单项添加到主菜单里面 JMenu_bj.add(JMenuItem_zt); JMenu_ck.add(JMenuItem_bz); JMenu_ck.add(JMenuItem_kx); JMenu_bz.add(JMenuItem_bzzt); JMenu_bz.add(JMenuItem_gy); } //在窗体最上面添加个TextField public void text_north() { this.add(JTextField_user,BorderLayout.NORTH); JTextField_user.setHorizontalAlignment(JTextField_user.RIGHT);//设置光标在右边 JTextField_user.setText("0"); JTextField_user.setEditable(false); } //在窗体左边添加JButton public void west_JButton() { this.getContentPane().add(JPanel_west,BorderLayout.WEST );//在西边添加个中间容器 JPanel_west.setLayout(new GridLayout(5,1,5,5));//分成四行一列,(5,5)的间隔 for(int i=0;i<s2.length;i++){ JButton j2=new JButton(s2[i]); j2.addActionListener(this); j2.setForeground(Color.red); JPanel_west.add(j2); } } //添加个CENTER中间容器 //把CENTER中间容器当成一个整体,又把它分为NORTH2和CENTER2的中间容器 public void center2_njb() { this.getContentPane().add(JPanel_center,BorderLayout.CENTER);//设置中间部分为中间容器,方向为CENTER JPanel_center.setLayout(new BorderLayout(5,5));//先把中间容器划分为5*5的网格,再次对他进行划分 JPanel_center.add(JPanel_north2,BorderLayout.NORTH);//在NORTH那又放了一个中间容器 JPanel_north2.setLayout(new GridLayout(1,3,5,5));//设置NORTH那为一行三列显示控件。间隙为5*5 for(int i=0;i<s1.length;i++){ JButton j=new JButton(s1[i]); j.addActionListener(this); j.setForeground(Color.red); JPanel_north2.add(j); } //---------------------------------------- JPanel_center.add(JPanel_center2,BorderLayout.CENTER);在CENTER那又放了一个中间容器 JPanel_center2.setLayout(new GridLayout(4,5,5,5));//设置CENTER那为四行五列显示控件。间隙为5*5 String [][] str=new String[][]{{"7","8","9","/","sqrt"},{"4","5","6","*","%"},{"1","2","3","-","1/x"},{"0","+/-",".","+","="}}; for(int i=0;i<4;i++){ for(int j=0;j<5;j++){ JButton jb=new JButton(str[i][j]); jb.addActionListener(this); jb.setForeground(Color.blue); if((j>0)&(j%3==0)){ jb.setForeground(Color.red ); } if(i==3&j==4){ jb.setForeground(Color.red ); } JPanel_center2.add(jb); } } } //变量实现保存 private String firstNum=""; private String operation="="; private boolean flag=true;//如果第一次输入清空Text的值,重新输入你的值。=》为FALSE,实现数据的APPEND //Wwhen true false //true:第一次用的时候,输入数字后=》false //当按过+-*/后。false-----true public void actionPerformed(ActionEvent e) { // TODO 自动生成方法存根 String target=e.getActionCommand();//获取当前按的按钮的TEXT值。 if("Backspace".equals(target)) { //最后一个数退后时,个位数为0,再退还是0; if(JTextField_user.getText().length()>1) { //for(int i=JTextField_user.getText().length()-1;i>1;i--) //{ StringBuffer buffer=new StringBuffer(JTextField_user.getText()); buffer.delete(JTextField_user.getText().length()-1, JTextField_user.getText().length()); JTextField_user.setText(buffer.toString()); //} } else { JTextField_user.setText("0"); } flag=true; } if("+/-".equals(target)) { if(Integer.parseInt(JTextField_user.getText())>0) { JTextField_user.setText(String.valueOf("-"+(Integer.parseInt(JTextField_user.getText())))); } else { //Math.abs()求绝对值 JTextField_user.setText(String.valueOf(Math.abs(Integer.parseInt(JTextField_user.getText())))); } } if("1/x".equals(target)) { if(Integer.parseInt(JTextField_user.getText())!=0) { if(Integer.parseInt(JTextField_user.getText())==1) { JTextField_user.setText(String.valueOf(1/(Integer.parseInt(JTextField_user.getText())))); } else { JTextField_user.setText(String.valueOf(1/(Double.parseDouble(JTextField_user.getText())))); } } else { System.out.println("错误: 分母不能为0!"); } flag=true; } if("C".equals(target)) { firstNum=""; JTextField_user.setText("0"); flag=true; } if("CE".equals(target)) { JTextField_user.setText("0"); flag=true; } if("sqrt".equals(target)) { if(Integer.parseInt(JTextField_user.getText())>0) { if(Integer.parseInt(JTextField_user.getText())==1) { JTextField_user.setText(String.valueOf(1/(Integer.parseInt(JTextField_user.getText())))); } else { JTextField_user.setText(String.valueOf(Math.sqrt(Integer.parseInt(JTextField_user.getText())))); } } else { System.out.println("错误:根号内的值要大于0!"); } flag=true; } if("=".equals(target)){ if(firstNum.indexOf(".")>=0||JTextField_user.getText().indexOf(".")>=0) { //Integer.parseInt(); //Double.parseDou(); double f=Double.parseDouble(firstNum); double two=Double.parseDouble(JTextField_user.getText()); double sum=0; if(operation.equals("+")){ sum=f+two; JTextField_user.setText(String.valueOf(sum)); firstNum=String.valueOf(sum); } else if(operation.equals("-")){ sum=f-two; JTextField_user.setText(String.valueOf(sum)); firstNum=String.valueOf(sum); } else if(operation.equals("*")){ sum=f*two; JTextField_user.setText(String.valueOf(sum)); firstNum=String.valueOf(sum); } else if(operation.equals("/")){ sum=f/two; JTextField_user.setText(String.valueOf(sum)); firstNum=String.valueOf(sum); } else if(operation.equals("%")) { int si; si=(int) (f%two); JTextField_user.setText(String.valueOf(si)); firstNum=String.valueOf(sum); } } else { int f2 = Integer.parseInt(firstNum); int two2= Integer.parseInt(JTextField_user.getText()); int sum2=0; if (operation.equals("+")) { sum2=f2+two2; JTextField_user.setText(String.valueOf(sum2)); firstNum=String.valueOf(sum2); } else if (operation.equals("-")) { sum2=f2-two2; JTextField_user.setText(String.valueOf(sum2)); firstNum=String.valueOf(sum2); } else if (operation.equals("*")) { sum2=f2*two2; JTextField_user.setText(String.valueOf(sum2)); firstNum=String.valueOf(sum2); } else if (operation.equals("/")) { double f3=f2; double two3=two2; double sum3=f3/two3 ; JTextField_user.setText(String.valueOf(sum3)); firstNum=String.valueOf(sum2); } else if(operation.equals("%")) { sum2=f2%two2; JTextField_user.setText(String.valueOf(sum2)); firstNum=String.valueOf(sum2); } } firstNum="0"; flag=true; } if("+-*/%".indexOf(target)>=0){ //第一:operation实现操作符的保存 //第二:保存第一个数 //第三:flag=true; operation=target; firstNum=JTextField_user.getText(); //第二:保存第一个数 flag=true; } //当得到数字和小数点后的工作 if("0123456789.".indexOf(target)>=0){ if(flag==true) { //JTextField_user.setText("0"); if (target.equals(".")) { flag= false; } else if("0".equals(target)) { JTextField_user.setText("0"); } else { JTextField_user.setText(""); StringBuffer buffer = new StringBuffer (JTextField_user.getText()); //JTextField_user.setText(target); JTextField_user.setText(buffer.toString()); flag= false; } } if(flag==false){ StringBuffer buffer=new StringBuffer(JTextField_user.getText()); //当小数存在了,以及按了小数点就什么事都不干。 //target.equals(".")就是判断如果按的不是点就继续添加 if(buffer.toString().indexOf(".")>=0&&target.equals(".")){ } else { buffer.append(target); } /*if(buffer.toString().substring(0, 1).equals("0")&&buffer.length()>1&&buffer.toString().substring(1,2)!=".") { String str=""; str=buffer.toString().substring(0, 1); }*/ JTextField_user.setText(buffer.toString()); } } } } |
JAVA计算器源码
最新推荐文章于 2024-07-29 14:22:26 发布