package 软件工程; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JTextArea; import javax.swing.JTextField; import java.awt.GridLayout; import java.awt.Color; import java.awt.Font; import javax.swing.JButton; import javax.swing.BoxLayout; import java.awt.GridBagLayout; import java.awt.GridBagConstraints; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.FlowLayout; import java.awt.CardLayout; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.ColumnSpec; import com.jgoodies.forms.layout.RowSpec; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import net.miginfocom.swing.MigLayout; import javax.swing.border.LineBorder; import javax.swing.SwingConstants; public class Calculator extends JFrame { private JPanel contentPane; private JTextField numberField; private JPanel panel; private JPanel panel_1; private JButton one; private JButton seven; private JButton subtraction; private JButton two; private JButton eight; private JButton four; private JButton nine; private JButton six; private JButton three; private JButton five; private JPanel panel_2; private JButton multiplication; private JButton sum; private JButton as; private JButton division; private String result=""; private JButton Clear; private JButton zero; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Calculator frame = new Calculator(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Calculator() { this.setResizable(false); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 600); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(new BorderLayout(0, 0)); //******************************************这个地方放显示的数据一个Panel里面装的JText JPanel Top = new JPanel(); //** Top.setPreferredSize(new Dimension(450, 100)); contentPane.add(Top, BorderLayout.NORTH); Top.setLayout(new GridLayout(0, 1, 0, 0)); //** numberField = new JTextField(); numberField.setFont(new Font("幼圆", Font.BOLD, 30)); numberField.setBackground(Color.LIGHT_GRAY); numberField.setText("0");// Top.add(numberField); //** numberField.setColumns(10); numberField.setEditable(false);//不可编辑 //监听器 ActionListener click=null; click=new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //当输入一个数时,计算器上面的0消失 fi(FIrsInput)第一个数字 String fi=numberField.getText().valueOf(0); System.out.println(fi); if(numberField.getText().equals("0")){numberField.setText(numberField.getText().replaceFirst("0", ""));} //@param operate是判断当时的按钮是什么 String operate=e.paramString().substring(21, 22); //考虑到如果先输入+-*/,这样会报错,不能让你输入 if(numberField.getText().equals("")&&(operate.equals("+")||operate.equals("-")||operate.equals("x")||operate.equals("/"))) { numberField.setText(""); System.out.println(fi);} else { //如果按的是操作符+-*/ if(operate.equals("/")||operate.equals("+")||operate.equals("-")||operate.equals("x")) { if(numberField.getText().matches("\d*([x]|[/]|[-]|[+])\d*")) { numberField.setText(""+cal()); } else { if(!(numberField.getText().endsWith("x")||numberField.getText().endsWith("-")||numberField.getText().endsWith("+")||numberField.getText().endsWith("/"))) { numberField.setText(numberField.getText()+operate); } } } else//这是按了其他数字键 { int number=Integer.parseInt(operate); numberField.setText(numberField.getText()+number); } } } }; panel = new JPanel(); panel.setPreferredSize(new Dimension(320, 250)); contentPane.add(panel, BorderLayout.WEST); two = new JButton("2"); two.addActionListener(click); two.setBorder(new LineBorder(new Color(0, 0, 0))); two.setMargin(new Insets(10, 14, 2, 14)); two.setFont(new Font("幼圆", Font.PLAIN, 30)); two.setPreferredSize(new Dimension(100, 115)); three = new JButton("3"); three.addActionListener(click); three.setBorder(new LineBorder(new Color(0, 0, 0))); three.setMargin(new Insets(10, 14, 2, 14)); three.setFont(new Font("幼圆", Font.PLAIN, 30)); three.setPreferredSize(new Dimension(100, 115)); four = new JButton("4"); four.addActionListener(click); four.setBorder(new LineBorder(new Color(0, 0, 0))); four.setMargin(new Insets(10, 14, 2, 14)); four.setFont(new Font("幼圆", Font.PLAIN, 30)); four.setPreferredSize(new Dimension(100, 115)); five = new JButton("5"); five.addActionListener(click); five.setBorder(new LineBorder(new Color(0, 0, 0))); five.setMargin(new Insets(10, 14, 2, 14)); five.setFont(new Font("幼圆", Font.PLAIN, 30)); five.setPreferredSize(new Dimension(100, 115)); six = new JButton("6"); six.addActionListener(click); six.setBorder(new LineBorder(new Color(0, 0, 0))); six.setMargin(new Insets(10, 14, 2, 14)); six.setFont(new Font("幼圆", Font.PLAIN, 30)); six.setPreferredSize(new Dimension(100, 115)); seven = new JButton("7"); seven.addActionListener(click); seven.setBorder(new LineBorder(new Color(0, 0, 0))); seven.setMargin(new Insets(10, 14, 2, 14)); seven.setFont(new Font("幼圆", Font.PLAIN, 30)); seven.setPreferredSize(new Dimension(100, 115)); eight = new JButton("8"); eight.addActionListener(click); eight.setBorder(new LineBorder(new Color(0, 0, 0))); eight.setMargin(new Insets(10, 14, 2, 14)); eight.setFont(new Font("幼圆", Font.PLAIN, 30)); eight.setPreferredSize(new Dimension(100, 115)); nine = new JButton("9"); nine.addActionListener(click); nine.setBorder(new LineBorder(new Color(0, 0, 0))); nine.setMargin(new Insets(10, 14, 2, 14)); nine.setFont(new Font("幼圆", Font.PLAIN, 30)); nine.setPreferredSize(new Dimension(100, 115)); panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); one = new JButton("1"); //************** one.addActionListener(click); one.setBorder(new LineBorder(new Color(0, 0, 0))); one.setMargin(new Insets(10, 14, 2, 14)); one.setFont(new Font("幼圆", Font.PLAIN, 30)); one.setPreferredSize(new Dimension(100, 115)); panel.add(one); panel.add(two); panel.add(three); panel.add(four); panel.add(five); panel.add(six); panel.add(seven); panel.add(eight); panel.add(nine); panel_1 = new JPanel(); contentPane.add(panel_1, BorderLayout.EAST); panel_1.setLayout(new BorderLayout(0, 0)); subtraction = new JButton("-"); subtraction.addActionListener(click); subtraction.setFont(new Font("幼圆", Font.BOLD, 30)); subtraction.setPreferredSize(new Dimension(90, 126)); panel_1.add(subtraction, BorderLayout.NORTH); sum = new JButton("+"); sum.addActionListener(click); sum.setFont(new Font("幼圆", Font.BOLD, 30)); sum.setPreferredSize(new Dimension(90, 100)); panel_1.add(sum, BorderLayout.SOUTH); Clear = new JButton("C"); Clear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { numberField.setText(""); } }); Clear.setPreferredSize(new Dimension(90, 126)); panel_1.add(Clear, BorderLayout.WEST); panel_2 = new JPanel(); panel_2.setPreferredSize(new Dimension(10, 80)); contentPane.add(panel_2, BorderLayout.SOUTH); panel_2.setLayout(new BorderLayout(0, 0)); multiplication = new JButton("x"); multiplication.addActionListener(click); multiplication.setFont(new Font("幼圆", Font.BOLD, 30)); multiplication.setMargin(new Insets(2, 0, 2, 50)); multiplication.setPreferredSize(new Dimension(150, 100)); panel_2.add(multiplication, BorderLayout.WEST); as = new JButton("="); as.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { numberField.setText(""+cal()); } }); as.setFont(new Font("幼圆", Font.BOLD, 30)); as.setPreferredSize(new Dimension(150, 100)); panel_2.add(as, BorderLayout.EAST); division = new JButton("/"); division.addActionListener(click); division.setFont(new Font("幼圆", Font.BOLD, 30)); division.setPreferredSize(new Dimension(150, 100)); panel_2.add(division, BorderLayout.CENTER); zero = new JButton("0"); zero.addActionListener(click); zero.setFont(new Font("宋体", Font.PLAIN, 20)); panel_2.add(zero, BorderLayout.NORTH); //****************************************** } public int sum(String zhi) { this.result=result+zhi; return Integer.parseInt(result); } //运算的方法,运算;;;; public int cal() { //如果为空直接返回了 String patt= "\d*([x]|[-]|[+]|[/])\d*"; if(!numberField.getText().matches(patt)) {return 0;} //加减乘除 String zhi=numberField.getText(); if (zhi.contains("x")) { String head=zhi.split("x")[0]; String foot=zhi.split("x")[1]; //返回乘法 return p(head)*p(foot); }else if(zhi.contains("/")) { String head=zhi.split("/")[0]; String foot=zhi.split("/")[1]; //返回触发 return p(head)/p(foot); }else if(zhi.contains("+")) { String head=zhi.split("[+]")[0]; String foot=zhi.split("[+]")[1]; //返回假发 return (p(head))+(p(foot)); }else if(zhi.contains("-")) { String head=zhi.split("-")[0]; String foot=zhi.split("-")[1]; //返回减法 return p(head)-p(foot); } return 0; // System.out.println(zhi.indexOf("x")); // System.out.println("head:"+head); // System.out.println("foot:"+foot); // return parseInt(head)*parseInt(foot); } //parseInt磨成int类型 public int p(String str) { return Integer.parseInt(str); } }