改进后的计算器
小弟不才,耗时两周,东拼西凑,终于做成这简单的计算器啊! 颇有些成就感。。。。。
但对于“多零”和“多点”情况还有点无能为力, 希望各位大虾不吝赐教!!!!!!!!!!!
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class MyCounter extends JFrame implements ActionListener
{
private JTextField text;
private JButton[] buttons;
private String p; // p为当前读入的信息
private String s; // s从键盘中获取的命令
private String symbol; // symbol表示要进行的运算
private double x; // x表示输入符号后的数字
private double result; // result为计算结果和读入符号前的数
private boolean flg; // flg表示是否已经输入符号
private boolean point; // point表示是否读入点
public MyCounter()
{
super("计算器");
this.setSize(200,300);
this.setLocation(400,300);
this.setResizable(false); // 窗口大小不可调整
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
text = new JTextField("0");
text.setBackground(Color.cyan);
text.setHorizontalAlignment(JTextField.RIGHT); // 右对齐显示
text.setEditable(false); //文本框不可编辑
this.add(text,"North");
JPanel p1 = new JPanel(new GridLayout(4,4));
buttons = new JButton[19];
buttons[0] = new JButton("7");
buttons[1] = new JButton("8");
buttons[2] = new JButton("9");
buttons[3] = new JButton("+");
buttons[4] = new JButton("4");
buttons[5] = new JButton("5");
buttons[6] = new JButton("6");
buttons[7] = new JButton("-");
buttons[8] = new JButton("1");
buttons[9] = new JButton("2");
buttons[10] = new JButton("3");
buttons[11] = new JButton("*");
buttons[12] = new JButton("0");
buttons[13] = new JButton(".");
buttons[14] = new JButton("=");
buttons[15] = new JButton("/");
for(int i=0;i<16;i++)
{
p1.add(buttons[i]);
buttons[i].addActionListener(this);
}
buttons[14].setBackground(Color.orange);
this.add(p1,"Center");
JPanel p2 = new JPanel();
buttons[16] = new JButton("+/-");
buttons[17] = new JButton("清除");
buttons[18] = new JButton("退格");
for(int i=16;i<19;i++)
{
p2.add(buttons[i]);
buttons[i].addActionListener(this);
buttons[i].setBackground(Color.green);
}
this.add(p2,"South");
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
// 以下两句有总纲切领只要,甚为巧妙
// 将读入命令与文本内容分开
// 方法 getText() 与 setText() 类似 蛋鸡问题。
p = text.getText();
s = e.getActionCommand();
if(s=="0"|s=="1"|s=="2"|s=="3"|s=="4"|s=="5"|
s=="6"|s=="7"|s=="8"|s=="9"|s==".")
{
if(flg)
{
text.setText(p+s);
}
else
{
text.setText(s);
flg = true;
}
}
if(s=="+"|s=="-"|s=="*"|s=="/")
{
result = Double.parseDouble(p);
flg = false;
symbol = s;
}
if(s=="=")
{
x = Double.parseDouble(p);
if(symbol=="+") result += x;
if(symbol=="-") result -= x;
if(symbol=="*") result *= x;
if(symbol=="/") result /= x;
text.setText(""+result);
flg = false;
}
if(s=="+/-")
{
text.setText(-Double.parseDouble(p)+""); //类型多次转换
}
if(s=="清除")
{
text.setText("0");
flg = false; //不使上0读入
}
if(s=="退格")
{
String ss = p;
int i = ss.length();
if(i>0)
{
ss = ss.substring(0,i-1);
text.setText(ss); // 同上
}
else if(i==0)
{
text.setText("0");
flg = false;
}
}
}
public static void main(String[] args)
{
new MyCounter();
}
}