package one;import java.awt.Button;
import java.awt.Component;
import java.awt.Container;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class ComFrame extends Frame {
/**
*
*/
private static final long serialVersionUID = 4815962372262243709L;
String valued="",op="",str="789/456*123-0.=+";
boolean clicknum=true,start=true;
int s=0;
double arg=0;
Button btn=null;
TextField txtInput=new TextField(12);
GridBagLayout gbl=new GridBagLayout();
GridBagConstraints gbc=new GridBagConstraints();
Panel pan=new Panel();
private Component addButton(String name, Container con){
btn=new Button();
btn.addActionListener(new MyFrameListener());
btn.setLabel(name);
con.add(btn);
return btn;
}
private void setGbc(GridBagConstraints gbc,int x,int y,int width,int height,GridBagLayout gbl, Component con){
gbc.gridx=x;
gbc.gridy=y;
gbc.gridwidth=width;
gbc.gridheight=height;
gbl.setConstraints(con, gbc);
}
public ComFrame(){
this.setTitle("计算机窗体");
pan.setLayout(gbl);
txtInput.setBounds(15, 45, 270, 25);
pan.setBounds(15, 80, 270, 150);
this.setLayout(null);
gbc.fill=GridBagConstraints.BOTH;
gbc.weightx=1.0;
gbc.weighty=1.0;
this.add(txtInput);
this.add(pan);
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
this.setGbc(gbc, j, i, 1, 1, gbl, this.addButton(str.substring(s, ++s), pan));
}
}
this.setGbc(gbc, 0, 4, 2, 1, gbl, this.addButton("清空", pan));
this.setGbc(gbc, 2, 4, 2, 1, gbl, this.addButton("退出", pan));
this.setSize(300, 250);
this.setVisible(true);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) {
new ComFrame();
}
class MyFrameListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("清空")){
}
else if(e.getActionCommand().equals("退出")){
System.exit(0);
}else{
Input(e.getActionCommand());
}
}
private void Input(String value){
if(value.equals("+")){
if(arg!=0.0&&clicknum==true&&!op.equals("="))
operation(Double.valueOf(valued));
clicknum=false;
op="+";
}
else if(value.equals("-")){
if(arg!=0.0&&clicknum==true&&!op.equals("="))
operation(Double.valueOf(valued));
clicknum=false;
op="-";
}
else if(value.equals("*")){
if(arg!=0.0&&clicknum==true&&!op.equals("="))
operation(Double.valueOf(valued));
clicknum=false;
op="*";
}
else if(value.equals("/")){
if(arg!=0.0&&clicknum==true&&!op.equals("="))
operation(Double.valueOf(valued));
clicknum=false;
op="/";
}
else if(value.equals("=")){
if(clicknum==true&&!op.equals("=")){
operation(Double.valueOf(valued));
}
clicknum=false;
op="=";
start=false;
}
else {
if(op.equals("=")){
arg=0.0;
valued=value;
}
if(!op.equals("")&&clicknum==false){
if(arg==0.0&&start==true){
arg=Double.valueOf(valued);
}
valued="";
clicknum=true;
start=true;
}
if(value=="."&&valued.contains(".")){
}
else if(value=="."&&valued==""){
valued="0.";
}
else{
valued=valued+value;
}
txtInput.setText(valued);
}
}
private void operation(Double n){
if(op.equals("+"))arg+=n;
if(op.equals("-"))arg-=n;
if(op.equals("*"))arg*=n;
if(op.equals("/"))arg/=n;
txtInput.setText(""+arg);
}
}
}窗体设计应该还可以吧
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;
}