本计算器的实现最基本的四则运算及开方、求倒数的功能。
计算器的基本框架使用java swing包中组件就行实现
需要用到的控件跟变量
<span style="white-space:pre"> </span>private JPanel jp1, jp2, jp3;//需要3个面板,一个放置文本框,一个放置复位、退格键,一个放置按钮组组件
private JButton[] jButtons;//1~9数字跟四则运算符,开方运算符,求倒数运算符
private JButton jb1, jb2, jb3;//退格按钮,复位按钮
private JTextField jTextField;//显示文本框
private JMenuBar jBar;//次要设置菜单功能(没有实现功能)
private JMenu edit,show,help;
private JMenuItem copy,niantie,biaozhun,science,math,net,about;
private String flag;//当点击运算符是,临时标记运算符用
private String aa = "";//拼接数字型字符串是所用
private LinkedList<Object> text = new LinkedList<Object>();//存放点击的数字按钮时获得的数字用
private double num1, num2, result;//运算时的变量
private String[] num = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*",
"%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };
主界面的组件代码:
public Calculator() {
super();
jBar = new JMenuBar();
edit = new JMenu("编辑");
jBar.add(edit);
copy = new JMenuItem("复制");
niantie = new JMenuItem("粘贴");
edit.add(copy);
edit.add(niantie);
show = new JMenu("查看");
jBar.add(show);
help = new JMenu("帮助");
jBar.add(help);
setJMenuBar(jBar);
jp1 = new JPanel();
jTextField = new JTextField("0.", 16);
jTextField.setHorizontalAlignment(JTextField.RIGHT);
jTextField.setEditable(false);
jp1.setLayout(new FlowLayout());
jp1.add(jTextField);
add(jp1);
jp3 = new JPanel();
jp3.setLayout(new FlowLayout());
jb1 = new JButton("BackSpace");
jb2 = new JButton("CE");
jb3 = new JButton("C");
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jp3.add(jb1);
jp3.add(jb2);
jp3.add(jb3);
add(jp3);
GridLayout GL = new GridLayout(4, 4, 3, 3);
jp2 = new JPanel();
jp2.setLayout(GL);
jButtons = new JButton[20];
for (int i = 0; i < num.length; i++) {
jButtons[i] = new JButton(num[i]);<pre name="code" class="java"><span style="white-space:pre"> </span>jp2.add(jButtons[i]);
}add(jp2);
setBounds(200, 200, 320, 270);
setVisible(true);
setResizable(false);
setLayout(new FlowLayout());
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
在for循环中对按钮就行事件监听
for (int i = 0; i < num.length; i++) {
jButtons[i] = new JButton(num[i]);
// jButtons[i].setPreferredSize(new Dimension(42,42));
jp2.add(jButtons[i]);
jButtons[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String tt = e.getActionCommand();
if (tt.equals("+") || tt.equals("-") || tt.equals("*")
|| tt.equals("/") || tt.equals("%")) {
if (!jTextField.equals("")) {
num1 = Double.parseDouble(jTextField.getText()
.toString());
flag = tt;
text.removeAll(text);
jTextField.setText(flag);
}
} else if (tt.equals("=")) {
num2 = Double.parseDouble(jTextField.getText()
.toString());
if (flag.equals("+")) {
result = num1 + num2;
jTextField.setText(result + "");
} else if (flag.equals("-")) {
if (num1 >= num2) {
result = num1 - num2;
jTextField.setText(result + "");
} else {
result = num2 - num1;
jTextField.setText("-" + result);
}
} else if (flag.equals("*")) {
result = num1 * num2;
jTextField.setText(result + "");
} else if (flag.equals("%")) {
result = num1 % num2;
jTextField.setText(result + "");
} else {
if (num2 != 0) {
result = num1 / num2;
jTextField.setText(result + "");
} else {
jTextField.setText("by zero");
}
}
} else if (tt.equals("sqrt")) {
if (!jTextField.equals("")) {
num1 = Double.parseDouble(jTextField.getText()
.toString());
result = Math.sqrt(num1);
jTextField.setText(result + "");
}
} else if (tt.equals("1/x")) {
if (!jTextField.equals("")) {
num1 = Double.parseDouble(jTextField.getText()
.toString());
result = 1 / num1;
;
jTextField.setText(result + "");
}
}else {
text.addFirst(tt);
for (int j = 0; j < text.size(); j++) {
aa = aa + text.get(j);
}
jTextField.setText(aa);
aa = "";
}
}
});
}