import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.math.BigDecimal;import javax.swing.*;public class TestComputer implements ActionListener{//用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口, //而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。 private boolean append = false;//数字处于替换状态 JTextField jtf = new JTextField(10);//构造一个具有指定列数的新的空 TextField。 private String operator = "+"; private String op1 = "0"; public void actionPerformed(ActionEvent ae){//发生操作时调用。 String com = ae.getActionCommand();//返回与此动作相关的命令字符串。 if("0123456789".indexOf(com)!=-1){//返回第一次出现的指定子字符串在此字符串中的索引。 if(append){//追加 String temp = jtf.getText();//返回此 TextComponent 中包含的文本。 jtf.setText(temp+com);//将此 TextComponent 文本设置为指定文本。 }else{//替换 jtf.setText(com); append = true; } }else if("+-*/".indexOf(com)!=-1){//返回第一次出现的指定子字符串在此字符串中的索引。 op1 = jtf.getText(); operator = com; append = false; }else if("=".equals(com)){ String op2 = jtf.getText(); BigDecimal d1 = new BigDecimal(op1);// 将 BigDecimal 的字符串表示形式转换为 BigDecimal。 //BigDecimal不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成 BigDecimal d2 = new BigDecimal(op2); if("+".equals(operator)){ d1 = d1.add(d2);//返回一个 BigDecimal,其值为(this + augend),其标度为 max(this.scale(), augend.scale()) }else if("-".equals(operator)){ d1 = d1.subtract(d2);//返回一个BigDecimal,其值为(this - subtrahend),其标度为max(this.scale(),subtrahend.scale()) }else if("*".equals(operator)){ d1 = d1.multiply(d2);//返回一个BigDecimal,其值为(this × multiplicand),其标度为(this.scale()+multiplicand.scale()) }else{ d1 = d1.divide(d2,10,BigDecimal.ROUND_HALF_UP); }//divide() 返回一个 BigDecimal,其值为 (this / divisor),其标度为指定标度。 jtf.setText(d1.toString());//返回此 BigDecimal 的字符串表示形式,如果需要指数,则使用科学记数法。 append = false; }else if(".".equals(com)){ String temp = jtf.getText(); if(temp.indexOf(com)==-1){//没有找到 jtf.setText(temp+"."); append = true; } }else if("+/-".equals(com)){ String temp = jtf.getText(); if(temp.startsWith("-")){ jtf.setText(temp.substring(1)); }else{ jtf.setText("-"+temp); } }else if("Back".equals(com)){ String temp = jtf.getText(); if(temp.length()>0){ jtf.setText(temp.substring(0,temp.length()-1)); } }else if("CE".equals(com)||"C".equals(com)){ jtf.setText("0"); } } public TestComputer(){ JFrame jf = new JFrame("grefr的计算器");//创建一个新的、初始不可见的、具有指定标题的 Frame。 JPanel jp = new JPanel();//创建具有双缓冲和流布局的新 JPanel。 String[] lab = {"Back","CE","C","+","7", "8","9","-","4","5","6","*","1","2", "3","/","0",".","+/-","="}; jp.setLayout(new GridLayout(5,4)); //setLayout(LayoutManager mgr)设置此容器的布局管理器。 //GridLayout(int rows, int cols)创建具有指定行数和列数的网格布局。 jtf.setEditable(false);//设置指定的 boolean 变量,以指示此 TextComponent 是否应该为可编辑的 JButton[] jb = new JButton[lab.length]; jf.add(jtf,BorderLayout.NORTH); for(int i=0;i<jb.length;i++){ jb[i] = new JButton(lab[i]); jp.add(jb[i]); jb[i].addActionListener(this);//将一个 ActionListener 添加到按钮中。 } jf.add(jp); jf.setSize(300,300); jf.setLocation(250, 250); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new TestComputer(); }} 追问 能帮我加上正弦余弦的算发 还有二进制八进制十六进制 还有对数的运算就是log的算法 请帮帮忙!
你用getText得到屏幕上显示的那些字符串,以 + - * / 为分割符,截取前面的字符串和后面的字符串,然后用double b = Double.parseDouble(a);这个方法转变为浮点数,再进行+ - * / 运算吧~不知道是不是你要的答案~!呵呵~~