package my;import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator ...{ public static void main(String[] args) ...{ CalculatorFrame frame=new CalculatorFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class CalculatorFrame extends JFrame ...{ public CalculatorFrame() ...{ setTitle("Calculator"); CalculatorPanel panel=new CalculatorPanel(); add(panel); pack(); } } class CalculatorPanel extends Panel ...{ public CalculatorPanel() ...{ setLayout(new BorderLayout()); result=0; lastCommand="="; start=true; flag=true; display=new JButton("0"); display.setEnabled(false); add(display,BorderLayout.NORTH); ActionListener insert=new InsertAction(); ActionListener command=new CommandAction(); panel=new JPanel(); panel.setLayout(new GridLayout(4,5)); addButton("7",insert); addButton("8",insert); addButton("9",insert); addButton("/",command); addButton("CE",command); addButton("4",insert); addButton("5",insert); addButton("6",insert); addButton("*",command); addButton("Backspace",command); addButton("1",insert); addButton("2",insert); addButton("3",insert); addButton("-",command); addButton("sqrt",command); addButton("0",insert); addButton(".",insert); addButton("=",command); addButton("+",command); addButton("1/x",command); add(panel,BorderLayout.CENTER); } private void addButton(String label,ActionListener listener) ...{ JButton button=new JButton(label); button.addActionListener(listener); panel.add(button); } private class InsertAction implements ActionListener ...{ public void actionPerformed(ActionEvent event) ...{ String input=event.getActionCommand(); if(start&&flag) ...{ display.setText(""); start=false; } if(flag) display.setText(display.getText()+input); } } private class CommandAction implements ActionListener ...{ public void actionPerformed(ActionEvent event) ...{ String command=event.getActionCommand(); if(command.equals("CE")) ...{ display.setText("0"); start=true; flag=true; command="="; } else if(start&&flag) ...{ if(command.equals("-")) ...{ display.setText(command); start=false; } else if((command.equals("1/x")||command.equals("sqrt"))&&flag) calculate(Double.parseDouble(display.getText()),command); else if(flag) lastCommand=command; } else ...{ if(command.equals("Backspace")&&flag) ...{ String s=display.getText(); char[] s1=s.toCharArray(); if(s.length()>=2) ...{ String s2=new String(s1,0,s.length()-1); display.setText(s2); } else ...{ display.setText("0"); start=true; } } else if(flag) ...{ calculate(Double.parseDouble(display.getText()),command); lastCommand=command; start=true; } } } } public void calculate(double x,String command) ...{ if(lastCommand.equals("+")) result+=x; else if(lastCommand.equals("-")) result-=x; else if(lastCommand.equals("/")) ...{ if(x!=0) result/=x; else ...{ display.setText("除数不能为0"); start=false; flag=false; return; } } else if(lastCommand.equals("*")) result*=x; else if(command.equals("1/x")) ...{ if(x!=0) result=1/x; else ...{ display.setText("除数不能为0"); start=false; flag=false; return; } } else if(command.equals("sqrt")) ...{ if(x>=0) result=Math.sqrt(x); else ...{ display.setText("函数输入无效"); start=false; flag=false; return; } } else if(lastCommand.equals("=")) result=x; display.setText(""+result); } private JButton display; private JPanel panel; private double result; private String lastCommand; private boolean start; private boolean flag; } 布局不是很好,其他的还行。功能还是有几个。