这是3月中旬写的计算器,通过与之前刚刚学习的登录界面相结合,通过登录界面进入计算器。
首先,谈一谈感想,对于计算器模块,基本上都是自己在冥思苦想,花了一天弄出来的,真心不容易啊,界面还是相当好看的。
计算器的button很多,当时采用的是空布局,对每个button的位置和内容是一个个设置的,十分的繁琐。而这可以通过用面板来实现,比如数字键盘构造一个网格布局的面板。
而且,计算器只实现了加减乘除,取余,倒数,取反,根号这些功能,对于实数只能输出数字,而不能进行运算。并且,整数的运算第二个数只能是个位数,当然,这个可以用将运算符及前面的数清空来实现。
//登录界面 (仿QQ界面) import java.awt.Color; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class LoginFrame { public void last(){ //创建窗体 JFrame jf = new JFrame(); //设置边框 jf.setTitle("只为不凡而来!"); jf.setDefaultCloseOperation(3); jf.setLayout(null); //设置窗体颜色 jf.setBackground(Color.BLUE); //设置窗体位置及大小 jf.setBounds(490,240,380,290); jf.setResizable(false);//设置禁止用户调整窗体的大小 JLabel label1 = new JLabel("帐号"); jf.add(label1); label1.setBounds(110,120,30,22); JTextField name= new JTextField (); jf.add(name); name.setBounds(150,120,150,22); JLabel label2 = new JLabel("密码"); jf.add(label2); label2.setBounds(110,150,30,22); JPasswordField password= new JPasswordField(10); jf.add(password); password.setBounds(150,150,150,22); JButton loginbutton = new JButton("登录"); jf.add(loginbutton); loginbutton.setBounds(110,215,150,30); JCheckBox box = new JCheckBox("记住密码"); jf.add(box); box.setBounds(110,180,80,15); JCheckBox box1= new JCheckBox("自动登录"); jf.add(box1); box1.setBounds(200,180,80,15); ImageIcon icon1 = new ImageIcon("img/qizai.jpg"); JLabel imgLabel2 = new JLabel(icon1); imgLabel2.setBounds(20,120,80,80); jf.add(imgLabel2); jf.setVisible(true); ImageIcon icon = new ImageIcon("img/天空.jpg"); JLabel imgLabel = new JLabel(icon); imgLabel.setBounds(0,0,400,300); jf.add(imgLabel); LoginListener m = new LoginListener (name,password); loginbutton.addActionListener(m); jf.setVisible(true); } public static void main(String[] args) { LoginFrame f1 = new LoginFrame(); f1.last(); } }
//登录界面的监听器,计算器的入口 import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class LoginListener implements ActionListener { private JTextField name ; private JPasswordField password; public LoginListener (JTextField name,JPasswordField password){ this.name=name; this.password=password; } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String nm=name.getText(); String ps=password.getText(); if((nm.equals("5") && ps.equals("1")) || (nm.equals("123456789") && ps.equals("12345"))){ JFrame jf1= new JFrame(); jf1.setTitle("英雄联盟计算器!"); //设置边框 jf1.setDefaultCloseOperation(3); jf1.setLayout(null); //设置窗体的布局方式为空布局 jf1.setBackground(Color.GRAY); //设置窗体颜色 jf1.setBounds(480,150,370,450); //设置窗体位置及大小 jf1.setResizable(false); //设置禁止用户调整窗体的大小 JTextField field= new JTextField (15); jf1.add(field); field.setBounds(10,10,340,150); field.setEditable(false); field.setOpaque(false); JButton b21= new JButton("←"); jf1.add(b21); b21.setBounds(10,170,60,40); ButtonListener m21 = new ButtonListener(field); b21.addActionListener(m21); jf1.setVisible(true); JButton b20= new JButton("CE"); jf1.add(b20); b20.addActionListener(m21); b20.setBounds(80,170,60,40); JButton b19= new JButton("C"); jf1.add(b19); b19.addActionListener(m21); b19.setBounds(150,170,60,40); JButton b18= new JButton("±"); jf1.add(b18); b18.addActionListener(m21); b18.setBounds(220,170,60,40); JButton b17= new JButton("√"); jf1.add(b17); b17.addActionListener(m21); b17.setBounds(290,170,60,40); JButton b7= new JButton("7"); jf1.add(b7); b7.addActionListener(m21); b7.setBounds(10,220,60,40); JButton b8= new JButton("8"); jf1.add(b8); b8.addActionListener(m21); b8.setBounds(80,220,60,40); JButton b9= new JButton("9"); jf1.add(b9); b9.addActionListener(m21); b9.setBounds(150,220,60,40); JButton b10= new JButton("/"); jf1.add(b10); b10.addActionListener(m21); b10.setBounds(220,220,60,40); JButton b16= new JButton("%"); jf1.add(b16); b16.addActionListener(m21); b16.setBounds(290,220,60,40); JButton b4= new JButton("4"); jf1.add(b4); b4.addActionListener(m21); b4.setBounds(10,270,60,40); JButton b5= new JButton("5"); jf1.add(b5); b5.addActionListener(m21); b5.setBounds(80,270,60,40); JButton b6= new JButton("6"); jf1.add(b6); b6.addActionListener(m21); b6.setBounds(150,270,60,40); JButton b11= new JButton("*"); jf1.add(b11); b11.addActionListener(m21); b11.setBounds(220,270,60,40); JButton b15= new JButton("1/x"); jf1.add(b15); b15.addActionListener(m21); b15.setBounds(290,270,60,40); JButton b1= new JButton("1"); jf1.add(b1); b1.addActionListener(m21); b1.setBounds(10,320,60,40); JButton b2= new JButton("2"); jf1.add(b2); b2.addActionListener(m21); b2.setBounds(80,320,60,40); JButton b3= new JButton("3"); jf1.add(b3); b3.addActionListener(m21); b3.setBounds(150,320,60,40); JButton b12= new JButton("-"); jf1.add(b12); b12.addActionListener(m21); b12.setBounds(220,320,60,40); JButton b14= new JButton("="); jf1.add(b14); b14.addActionListener(m21); b14.setBounds(290,320,60,90); JButton b0= new JButton("0"); jf1.add(b0); b0.addActionListener(m21); b0.setBounds(10,370,130,40); JButton b23= new JButton("."); jf1.add(b23); b23.addActionListener(m21); b23.setBounds(150,370,60,40); JButton b13= new JButton("+"); jf1.add(b13); b13.addActionListener(m21); b13.setBounds(220,370,60,40); ImageIcon icon3 = new ImageIcon("img/blue.jpg"); JLabel imgLabel3= new JLabel(icon3); imgLabel3.setBounds(0,0,400,420); jf1.add(imgLabel3); jf1.setVisible(true); } else JOptionPane.showMessageDialog(null, "账号或者密码错误"); } }
//计算器的监听器 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JTextField; public class ButtonListener implements ActionListener { private String content; int number; double re,ff; int a=0,b,z=0; double rec,sq,poi=0; String m,p="",mi="",mul="",div="",rem="",po=""; double neg; private JTextField jt; //定义运算函数 double plus ( double m, double n ) { return m+n; } double minus(double m ,double n) { return m-n; } double multiply(double m,double n) { return m*n; } double divide(double m,double n) { return m/n; } int remainder (int m,int n) { return m%n; } double reciproc (double m) { return (double) 1/m; } double negate(double m) { m=-m; return m; } public ButtonListener(JTextField jt){ this.jt=jt; } public void actionPerformed(ActionEvent e) { content=jt.getText(); //获取输入框中的文本 try{ //ff = Float.parseFloat(e.getActionCommand()); number=Integer.parseInt(e.getActionCommand()); //将事件源转化为数字进行判断 }catch(Exception ex){ } if(0<=number && number<10){ //判断事件源为数字 b=number; if(content.equals(p)){ //通过判断选择与之对应的函数进行运算 re=plus(a,b); //加法运算 } if(content.equals(mi)){ re=minus(a,b); //减法运算 } if(content.equals(mul)){ re=multiply(a,number); //乘法运算 } if(content.equals(div)){ re=divide(a,number); //除法运算 } if(content.equals(rem)){ re=remainder(a,number); //取余运算 } if(content.equals(po)){ jt.setText(""+poi); //小数点运算 } jt.setText(content+number); } if(e.getActionCommand().equals("+")){ jt.setText(content+e.getActionCommand()); m=e.getActionCommand(); a=Integer.parseInt(content); jt.setText(content+m); p=content+m; } else if(e.getActionCommand().equals("-")){ jt.setText(content+e.getActionCommand()); m=e.getActionCommand(); a=Integer.parseInt(content); jt.setText(content+m); mi=content+m; } else if(e.getActionCommand().equals("*")){ jt.setText(content+e.getActionCommand()); m=e.getActionCommand(); a=Integer.parseInt(content); jt.setText(content+m); mul=content+m; } else if(e.getActionCommand().equals("/")){ jt.setText(content+e.getActionCommand()); m=e.getActionCommand(); a=Integer.parseInt(content); jt.setText(content+m); div=content+m; } else if(e.getActionCommand().equals("%")){ jt.setText(content+e.getActionCommand()); m=e.getActionCommand(); a=Integer.parseInt(content); jt.setText(content+m); rem=content+m; } else if(e.getActionCommand().equals("1/x")){ a=Integer.parseInt(content); rec=reciproc(a); jt.setText("reciproc("+content+")="+rec); } else if(e.getActionCommand().equals("±")){ a=Integer.parseInt(content); neg=negate(a); jt.setText("reciproc("+content+")="+neg); } else if(e.getActionCommand().equals("√")){ a=Integer.parseInt(content); sq=Math.sqrt(a); jt.setText("sqrt("+content+")="+sq); } else if(e.getActionCommand().equals(".")){ m=e.getActionCommand(); a=Integer.parseInt(content); po=content+m; jt.setText(po); } //以下还未实现 else if(e.getActionCommand().equals("C")){ jt.setText(content+m); } else if(e.getActionCommand().equals("CE")){ jt.setText(content+m); } else if(e.getActionCommand().equals("←")){ jt.setText(content+e.getActionCommand()); m=e.getActionCommand(); a=Integer.parseInt(content); jt.setText(content+m); mi=content+m; } else if(e.getActionCommand().equals("=")){ jt.setText(content+e.getActionCommand()+re); } } }