//百度文库找的,可费了我的财富值了,你可要把分给我呀。
package lee;
/*文件名:Calculator.java
*说明:简易科学计算器
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends Frame implements ActionListener, WindowListener
{
private Container container;
private GridBagLayout layout;
private GridBagConstraints constraints;
private JTextField displayField; //计算结果显示区
private String lastCommand; //保存+,-,*,/,=命令0
private double result; //保存计算结果
private boolean start; //判断是否为数字的开始
private JMenuBar menubar;
private JMenuItem m_exit,m2_ejz,m2_bjz;
private Dialog dialog;
private Label label_dialog;
private JButton button_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_2,
button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_0,
button_plus,button_minus,button_multiply,button_divide,button_point,
button_equal,button_log,button_tan,button_cos,button_sin,button_exp;
public Calculator() //构造方法设置布局、为按钮注册事件监听器
{
super(Calculator);
this.setLocation(240,200);
this.setSize(350,300);
this.setResizable(true);
this.setLayout(new GridLayout(7,1));
this.addmyMenu(); //调用成员方法添加菜单
displayField=new JTextField(30);
this.add(displayField);
displayField.setEditable(true);
start=true;
result=0;
lastCommand = =;
JPanel panel0=new JPanel();
panel0.setLayout(new GridLayout(1,4,4,4));
JPanel panel1=new JPanel();
panel1.setLayout(new GridLayout(1,5,4,4));
this.add(panel1);
button_sqrt=new JButton(sqrt);
button_plusminus=new JButton(+/-);
button_exp=new JButton(exp);
button_CE=new JButton(退格);
button_cancel=new JButton(C);
JPanel panel2=new JPanel();
panel2.setLayout(new GridLayout(1,5,4,4));
this.add(panel2);
button_7=new JButton(7);
button_8=new JButton(8);
button_9=new JButton(9);
button_log=new JButton(log);
button_divide=new JButton(/);
JPanel panel3=new JPanel();
panel3.setLayout(new GridLayout(1,5,4,4));
this.add(panel3);
button_4=new JButton(4);
button_5=new JButton(5);
button_6=new JButton(6);
button_tan=new JButton(tan);
button_multiply=new JButton(*);
JPanel panel4=new JPanel();
panel4.setLayout(new GridLayout(1,5,4,4));
this.add(panel4);
button_1=new JButton(1);
button_2=new JButton(2);
button_3=new JButton(3);
button_cos=new JButton(cos);
button_minus=new JButton(-);
JPanel panel5=new JPanel();
panel5.setLayout(new GridLayout(1,5,4,4));
this.add(panel5);
button_0=new JButton(0);
button_point=new JButton(.);
button_equal=new JButton(=);
button_sin=new JButton(sin);
button_plus=new JButton(+);
panel1.add(button_sqrt);
panel1.add(button_plusminus);
panel1.add(button_exp);
panel1.add(button_CE);
panel1.add(button_cancel);
panel2.add(button_7);
panel2.add(button_8);
panel2.add(button_9);
panel2.add(button_log);
panel2.add(button_divide);
panel3.add(button_4);
panel3.add(button_5);
panel3.add(button_6);
panel3.add(button_tan);
panel3.add(button_multiply);
panel4.add(button_1);
panel4.add(button_2);
panel4.add(button_3);
panel4.add(button_cos);
panel4.add(button_minus);
panel5.add(button_0);
panel5.add(button_point);
panel5.add(button_equal);
panel5.add(button_sin);
panel5.add(button_plus);
button_sqrt.addActionListener(this);
button_plusminus.addActionListener(this);
button_exp.addActionListener(this);
button_CE.addActionListener(this);
button_cancel.addActionListener(this);
button_7.addActionListener(this);
button_8.addActionListener(this);
button_9.addActionListener(this);
button_log.addActionListener(this);
button_divide.addActionListener(this);
button_4.addActionListener(this);
button_5.addActionListener(this);
button_6.addActionListener(this);
button_tan.addActionListener(this);
button_multiply.addActionListener(this);
button_1.addActionListener(this);
button_2.addActionListener(this);
button_3.addActionListener(this);
button_cos.addActionListener(this);
button_minus.addActionListener(this);
button_0.addActionListener(this);
button_point.addActionListener(this);
button_equal.addActionListener(this);
button_sin.addActionListener(this);
button_plus.addActionListener(this);
this.addWindowListener(new WinClose()); //注册窗口监听器
this.setVisible(true);
}
private void addmyMenu() //菜单的添加
{
JMenuBar menubar=new JMenuBar();
this.add(menubar);
JMenu m1=new JMenu(选项);
JMenu m2=new JMenu(进制转换);
JMenuItem m1_exit=new JMenuItem(退出);
m1_exit.addActionListener(this);
JMenuItem m2_ejz=new JMenuItem(二进制);
m2_ejz.addActionListener(this);
JMenuItem m2_bjz=new JMenuItem(八进制);
m2_bjz.addActionListener(this);
JMenu m3 = new JMenu( 帮助);
JMenuItem m3_Help = new JMenuItem(用法);
m3_Help.addActionListener(this);
dialog = new Dialog(this,提示,true); //模式窗口
dialog.setSize(240,80);
label_dialog = new Label(,Label.CENTER); //标签的字符串为空,居中对齐
dialog.add(label_dialog);
dialog.addWindowListener(this); //为对话框注册窗口事件监听器
m1.add(m1_exit);
menubar.add(m1);
m2.add(m2_ejz);
m2.add(m2_bjz);
menubar.add(m2);
m3.add(m3_Help);
menubar.add(m3); }
public void actionPerformed(ActionEvent e) //按钮的单击事件处理方法
{
if(e.getSource().equals(button_1)||e.getSource().equals(button_2)||
e.getSource().equals(button_3)||e.getSource().equals(button_4)||
e.getSource().equals(button_5)|| e.getSource().equals(button_6)||
e.getSource().equals(button_7)|| e.getSource().equals(button_8)||
e.getSource().equals(button_9) ||e.getSource().equals(button_0)||
e.getSource().equals(button_point)||e.getSource().equals(button_plusminus)||
e.getSource().equals(button_cancel)||e.getSource().equals(button_CE))
{ //非运算符的处理方法
String input=e.getActionCommand();
if (start)
{
displayField.setText();
start=false;
if(input.equals(+/-))
displayField.setText(displayField.getText()+-);
}
if(!input.equals(+/-))
{
String str=displayField.getText();
if(input.equals(退格)) //退格键的实现方法
{
if(str.length()>0)
displayField.setText(str.substring(0,str.length()-1));
}
else if(input.equals(C)) //清零键的实现方法
{
displayField.setText(0);
start=true;
}
else
displayField.setText(displayField.getText()+input);
}
}
else if (e.getActionCommand()==二进制) //二进制的转换
{
int n=Integer.parseInt(displayField.getText());
displayField.setText(Integer.toBinaryString(n));
}
else if (e.getActionCommand()==八进制) //八进制的转换
{
int n=Integer.parseInt(displayField.getText());
displayField.setText(Integer.toOctalString(n));
}
else if (e.getActionCommand()==退出) //选项中退出的处理方法
{
System.exit(0);
}
else if (e.getActionCommand()==用法) //按下'帮助'菜单栏中用法的处理方法
{
label_dialog.setText(sqrt,exp等键是先输运算符再输数字\n);
dialog.setLocation(400,250);
dialog.setVisible(true);
}
else //各运算符的识别
{
String command=e.getActionCommand();
if(start)
{
lastCommand=command;
}
else
{
calculate(Double.parseDouble(displayField.getText()));
lastCommand=command;
start=true;
}
}
}
public void calculate(double x) //各运算符的具体运算方法
{
double d=0;
if (lastCommand.equals(+))
result+= x;
else if (lastCommand.equals(-))
result-=x;
else if (lastCommand.equals(*))
result*=x;
else if (lastCommand.equals(/))
result/=x;
else if (lastCommand.equals(=))
result=x;
else if (lastCommand.equals(sqrt))
{
d=Math.sqrt(x);
result=d;
}
else if (lastCommand.equals(exp))
{
d=Math.exp(x);
result=d;
}
else if (lastCommand.equals(log))
{
d=Math.log(x);
result=d;
}
else if (lastCommand.equals(tan))
{
d=Math.tan(x);
result=d;
}
else if (lastCommand.equals(cos))
{
d=Math.cos(x);
result=d;
}
else if (lastCommand.equals(sin))
{
d=Math.sin(x);
result=d;
}
displayField.setText(+ result);
}
public void windowClosing(WindowEvent e)
{
if(e.getSource()==dialog)
dialog.setVisible(false); //隐藏对话框
else
System.exit(0);
}
public void windowOpened(WindowEvent e) { }
public void windowActivated(WindowEvent e) { }
public void windowDeactivated(WindowEvent e) { }
public void windowClosed(WindowEvent e) { }
public void windowIconified(WindowEvent e) { }
public void windowDeiconified(WindowEvent e) { }
public static void main(String args[])
{
Calculator calculator=new Calculator();
}
}
class WinClose implements WindowListener
{
public void windowClosing(WindowEvent e) //单击窗口关闭按钮时触发并执行实现窗口监听器接口中的方法
{
System.exit(0); //结束程序运行
}
public void windowOpened(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeactivated(WindowEvent e){}
public void windowClosed(WindowEvent e){}
public void windowIconified(WindowEvent e){}
public void windowDeiconified(WindowEvent e){}
}
简单的计算器...C按钮没做 其他的凑合吧 自己看要怎么改在去改改
package test;
import java.awt.*;
import java.math.BigDecimal ;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.* ;
public class TestCalculator implements ActionListener{
private boolean append = false ;
JTextField jtf = new JTextField(10) ;
JButton[] jb = new JButton[20] ;
private String operator = + ;
private String op1 = 0 ;
public TestCalculator()
{
JFrame jf = new JFrame(TestJPanel) ;
JPanel jp = new JPanel() ;
jp.setLayout(new GridLayout(5,4)) ;
String[] str ={Back,CE,C,+,7,8,9,-,4,5,6,*,1,2,3,/,0,.,+/-,=} ;
jf.add(jtf,BorderLayout.NORTH) ;
for(int i=0;i<jb.length;i++)
{
jb[i] = new JButton(str[i]) ;
jp.add(jb[i]) ;
jb[i].addActionListener(this) ;
}
jf.add(jp) ;
jf.setSize(400,400) ;
jf.setVisible(true) ;
jf.setLocation(300,100) ;
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
}
StringBuffer sb1 = new StringBuffer() ;
StringBuffer sb2 = new StringBuffer() ;
public void actionPerformed(ActionEvent ae)
{
String comm = ae.getActionCommand() ;
if(0123456789.indexOf(comm)!=-1)
{
if(append) //追加
{
String temp = jtf.getText() ;
jtf.setText(temp+comm) ;
}else //替换
{
jtf.setText(comm) ;
append = true ;
}
}else if(+-*/.indexOf(comm)!=-1)
{
op1 = jtf.getText() ;
operator = comm ;
append = false ;
}else if(=.equals(comm))
{
String op2 = jtf.getText() ;
BigDecimal d1 = new BigDecimal(op1) ;
BigDecimal d2 = new BigDecimal(op2) ;
if(+.equals(operator))
{
d1 = d1.add(d2) ;
}else if(-.equals(operator))
{
d1 = d1.subtract(d2);
}else if(*.equals(operator))
{
d1 = d1.multiply(d2) ;
}else
{
d1 = d1.divide(d2,10,BigDecimal.ROUND_HALF_UP) ;
}
jtf.setText(d1.toString()) ;
append = false ;
}else if(..equals(comm))
{
String temp = jtf.getText() ;
if(temp.indexOf(comm)==-1) //没有找到
{
jtf.setText(temp+.) ;
append = true ;
}
}else if(+/-.equals(comm))
{
String temp = jtf.getText() ;
if(temp.startsWith(-))
{
jtf.setText(temp.substring(1)) ;
}else
{
jtf.setText(-+temp) ;
}
}else if(Back.equals(comm))
{
String temp = jtf.getText() ;
if(temp.length()>0)
{
jtf.setText(temp.substring(0,temp.length()-1)) ;
}
}else if(CE.equals(comm))
{
jtf.setText(0) ;
}
}
public static void main(String[] args)
{
new TestCalculator() ;
}
}