展开全部
class CalcBtn extends JButton {
private static final long serialVersionUID = 1L;
Font font = new Font("仿宋", 1, 22);
public CalcBtn(String text, Color color) {
e69da5e887aa3231313335323631343130323136353331333330336331super(text);
setForeground(color);
setFont(font);
setMargin(new Insets(0, 0, 0, 0));
setFocusable(false);
}
}
@SuppressWarnings("serial")
public class CalcFrame extends JFrame implements ActionListener {
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
ex.printStackTrace();
}
new CalcFrame().setVisible(true);
}
private CalcBtn btn_1 = new CalcBtn("1", Color.BLUE);
private CalcBtn btn_2 = new CalcBtn("2", Color.BLUE);
private CalcBtn btn_3 = new CalcBtn("3", Color.BLUE);
private CalcBtn btn_4 = new CalcBtn("4", Color.BLUE);
private CalcBtn btn_5 = new CalcBtn("5", Color.BLUE);
private CalcBtn btn_6 = new CalcBtn("6", Color.BLUE);
private CalcBtn btn_7 = new CalcBtn("7", Color.BLUE);
private CalcBtn btn_8 = new CalcBtn("8", Color.BLUE);
private CalcBtn btn_9 = new CalcBtn("9", Color.BLUE);
private CalcBtn btn_0 = new CalcBtn("0", Color.BLUE);
private CalcBtn btn_back = new CalcBtn("←", Color.red);
private CalcBtn btn_c = new CalcBtn("C", Color.red);
private CalcBtn btn_ce = new CalcBtn("CE", Color.red);
private CalcBtn btn_sub = new CalcBtn("-", Color.red);
private CalcBtn btn_multi = new CalcBtn("*", Color.red);
private CalcBtn btn_div = new CalcBtn("/", Color.red);
private CalcBtn btn_add = new CalcBtn("+", Color.red);
private CalcBtn btn_sqrt = new CalcBtn("sqrt", Color.BLUE);
private CalcBtn btn_mod = new CalcBtn("%", Color.BLUE);
private CalcBtn btn_x = new CalcBtn("1/x", Color.BLUE);
private CalcBtn btn_res = new CalcBtn("=", Color.red);
private CalcBtn btn_point = new CalcBtn(".", Color.red);
private CalcBtn btn_flag = new CalcBtn("+/-", Color.BLUE);
private JButton btn_mem = new JButton("");
private CalcBtn btn_m = new CalcBtn("M+", Color.BLUE);
private CalcBtn btn_mc = new CalcBtn("MC", Color.BLUE);
private CalcBtn btn_mr = new CalcBtn("MR", Color.BLUE);
private CalcBtn btn_ms = new CalcBtn("MS", Color.BLUE);
JPanel pan_jtf = new JPanel();
JPanel pan_back = new JPanel();
JPanel pan_mem = new JPanel();
JPanel pan_num = new JPanel();
JTextField jtf_res = new JTextField();
//
private JMenuBar menuBar = new JMenuBar();
private JMenu menu_edit = new JMenu("编辑(E)");
private JMenu menu_view = new JMenu("查看(V)");
private JMenu menu_help = new JMenu("帮助(H)");
private JMenuItem editMenu_copy = new JMenuItem("复制(C)");
private JMenuItem editMenu_paste = new JMenuItem("粘贴(P)");
private JCheckBoxMenuItem viewmenu_standard = new JCheckBoxMenuItem(
"标准型(T)");
private JCheckBoxMenuItem viewmenu_science = new JCheckBoxMenuItem("科学型(S)");
private JCheckBoxMenuItem viewmenu_grouping = new JCheckBoxMenuItem(
"数字分组(I)");
private JMenuItem helpmenu_help = new JMenuItem("帮助主题(H)");
private JMenuItem helpmenu_about = new JMenuItem("关于计算器(A)");
String save1, save2;
BigDecimal op1, op2;
boolean isBigDecimal = false;
int preOp, currentOp = 0;
StringBuffer str = new StringBuffer();
public CalcFrame() {
this.setTitle(" 於 ☆ 弦 ");
this.setResizable(false);
setSize(444, 390);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setJMenuBar(menuBar);
setLayout(null);
init_pan_jtf();
init_menuBar();
init_pan_back();
init_pan_mem();
init_pan_num();
getContentPane().add(pan_jtf);
getContentPane().add(pan_back);
getContentPane().add(pan_mem);
getContentPane().add(pan_num);
}
private void init_menuBar() {
menuBar.add(menu_edit);
menuBar.add(menu_view);
menuBar.add(menu_help);
menu_edit.add(editMenu_copy);
menu_edit.add(editMenu_paste);
menu_view.add(viewmenu_standard);
menu_view.add(viewmenu_science);
menu_view.addSeparator();
menu_view.add(viewmenu_grouping);
menu_help.add(helpmenu_help);
menu_help.addSeparator();
menu_help.add(helpmenu_about);
menu_edit.setMnemonic('E');
menu_view.setMnemonic('V');
menu_help.setMnemonic('H');
editMenu_copy.setMnemonic('C');
editMenu_copy.setAccelerator(KeyStroke.getKeyStroke('C',
InputEvent.CTRL_MASK));
editMenu_paste.setMnemonic('P');
editMenu_paste.setAccelerator(KeyStroke.getKeyStroke('V',
InputEvent.CTRL_MASK));
viewmenu_standard.setMnemonic('T');
viewmenu_science.setMnemonic('S');
viewmenu_grouping.setMnemonic('I');
helpmenu_help.setMnemonic('H');
helpmenu_about.setMnemonic('A');
}
public void init_pan_back() {
pan_back.setSize(340, 40);
pan_back.setLocation(85, 60);
pan_back.setLayout(new GridLayout(1, 3, 5, 0));
pan_back.add(btn_back);
pan_back.add(btn_ce);
pan_back.add(btn_c);
btn_back.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!jtf_res.getText().trim().equals("0.")) {
if (str.length() != 1 && str.length() != 0) {
jtf_res.setText(str.delete(str.length() - 1,
str.length()).toString());
} else {
jtf_res.setText("0.");
str.setLength(0);
}
}
op2 = new BigDecimal(jtf_res.getText().trim());
}
});
btn_c.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jtf_res.setText("0.");
op1 = op2 = new BigDecimal(0);
str.replace(0, str.length(), " ");
preOp = currentOp = 0;
}
});
btn_ce.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jtf_res.setText("0.");
}
});
}
public void init_pan_jtf() {
jtf_res.setHorizontalAlignment(JTextField.RIGHT);
jtf_res.setFont(new Font("仿宋", 0, 20));
jtf_res.setText("0.");
jtf_res.setEditable(false);
// jtf_res.setFocusable(false);
pan_jtf.setSize(420, 40);
pan_jtf.setLocation(10, 5);
pan_jtf.setLayout(new BorderLayout());
pan_jtf.add(jtf_res);
}
public void init_pan_mem() {
pan_mem.setSize(60, 270);
pan_mem.setLocation(10, 60);
pan_mem.setLayout(new GridLayout(5, 1, 0, 5));
pan_mem.add(btn_mem);
btn_mem.setEnabled(false);
pan_mem.add(btn_mc);
pan_mem.add(btn_mr);
pan_mem.add(btn_ms);
pan_mem.add(btn_m);
}
public void init_pan_num() {
pan_num.setSize(340, 220);
pan_num.setLocation(85, 110);
pan_num.setLayout(new GridLayout(4, 5, 5, 5));
pan_num.add(btn_7);
pan_num.add(btn_8);
pan_num.add(btn_9);
pan_num.add(btn_div);
pan_num.add(btn_sqrt);
pan_num.add(btn_4);
pan_num.add(btn_5);
pan_num.add(btn_6);
pan_num.add(btn_multi);
pan_num.add(btn_mod);
pan_num.add(btn_1);
pan_num.add(btn_2);
pan_num.add(btn_3);
pan_num.add(btn_sub);
pan_num.add(btn_x);
pan_num.add(btn_0);
pan_num.add(btn_flag);
pan_num.add(btn_point);
pan_num.add(btn_add);
pan_num.add(btn_res);
btn_1.addActionListener(this);
btn_2.addActionListener(this);
btn_3.addActionListener(this);
btn_4.addActionListener(this);
btn_5.addActionListener(this);
btn_6.addActionListener(this);
btn_7.addActionListener(this);
btn_8.addActionListener(this);
btn_9.addActionListener(this);
btn_0.addActionListener(this);
btn_sub.addActionListener(this);
btn_multi.addActionListener(this);
btn_div.addActionListener(this);
btn_add.addActionListener(this);
btn_sqrt.addActionListener(this);
btn_x.addActionListener(this);
btn_res.addActionListener(this);
btn_point.addActionListener(this);
btn_flag.addActionListener(this);
// btn_mod.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent e) {
String s = e.getActionCommand();
BigDecimal i = new BigDecimal(1);
String temp = jtf_res.getText().trim();
BigDecimal temp1 = new BigDecimal(temp);
if (e.getSource() == btn_flag) {
BigDecimal temp3 = new BigDecimal(jtf_res.getText());
BigDecimal temp4 = new BigDecimal(-1);
BigDecimal temp5 = temp3.multiply(temp4);
jtf_res.setText("" + temp5);
} else if (s.equals("1/x")) {
jtf_res.setText("" + i.divide(temp1, new MathContext(30)));
} else if (s.equals("sqrt")) {
jtf_res.setText("" + temp1.multiply(temp1));
} else if (s.equals("+")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 1;
op2 = new BigDecimal("0");
jtf_res.setText("" + op1);
} else {
currentOp = preOp;
preOp = 1;
switch (currentOp) {
case 1:
op1 = op1.add(op2);
jtf_res.setText("" + op1);
break;
case 2:
op1 = op1.subtract(op2);
jtf_res.setText("" + op1);
break;
case 3:
op1 = op1.multiply(op2);
jtf_res.setText("" + op1);
break;
case 4:
op1 = op1.divide(op2, new MathContext(30));
jtf_res.setText("" + op1);
break;
}
}
} else if (s.equals("-")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 2;
jtf_res.setText("" + op1);
} else {
currentOp = preOp;
preOp = 2;
switch (currentOp) {
case 1:
op1 = op1.add(op2);
jtf_res.setText("" + op1);
break;
case 2:
op1 = op1.subtract(op2);
jtf_res.setText("" + op1);
break;
case 3:
op1 = op1.multiply(op2);
jtf_res.setText("" + op1);
break;
case 4:
op1 = op1.divide(op2, new MathContext(30));
jtf_res.setText("" + op1);
break;
}
}
} else if (s.equals("*")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 3;
jtf_res.setText("" + op1);
} else {
currentOp = preOp;
preOp = 3;
switch (currentOp) {
case 1:
op1 = op1.add(op2);
jtf_res.setText("" + op1);
break;
case 2:
op1 = op1.subtract(op2);
jtf_res.setText("" + op1);
break;
case 3:
op1 = op1.multiply(op2);
jtf_res.setText("" + op1);
break;
case 4:
op1 = op1.divide(op2, new MathContext(30));
jtf_res.setText("" + op1);
break;
}
}
} else if (s.equals("/")) {
str.setLength(0);
if (currentOp == 0) {
preOp = currentOp = 4;
jtf_res.setText("" + op1);
} else {
currentOp = preOp;
preOp = 4;
switch (currentOp) {
case 1:
op1 = op1.add(op2);
jtf_res.setText("" + op1);
break;
case 2:
op1 = op1.subtract(op2);
jtf_res.setText("" + op1);
break;
case 3:
op1 = op1.multiply(op2);
jtf_res.setText("" + op1);
break;
case 4:
op1 = op1.divide(op2, new MathContext(30));
jtf_res.setText("" + op1);
break;
}
}
} else if (s.equals("=")) {
if (currentOp == 0) {
str.setLength(0);
jtf_res.setText("" + op2);
} else {
str.setLength(0);
currentOp = preOp;
switch (currentOp) {
case 1:
op1 = op1.add(op2);
jtf_res.setText("" + op1);
break;
case 2:
op1 = op1.subtract(op2);
jtf_res.setText("" + op1);
break;
case 3:
op1 = op1.multiply(op2);
jtf_res.setText("" + op1);
break;
case 4:
op1 = op1.divide(op2, new MathContext(30));
jtf_res.setText("" + op1);
break;
}
currentOp = 0;
op2 = new BigDecimal("0");
}
} else if (s.equals(".")) {
isBigDecimal = true;
if (jtf_res.getText().trim().indexOf('.') != -1)
;
else {
if (jtf_res.getText().trim().equals("0")) {
str.setLength(0);
jtf_res.setText((str.append("0" + s)).toString());
} else if (jtf_res.getText().trim().equals("")) {
} else {
jtf_res.setText((str.append(s)).toString());
}
}
} else if (s.equals("0")) {
if (jtf_res.getText().trim().equals("0.")) {
} else {
jtf_res.setText(str.append(s).toString());
op2 = new BigDecimal(jtf_res.getText().trim());
}
} else {
jtf_res.setText(str.append(s).toString());
op2 = new BigDecimal(jtf_res.getText().trim());
if (currentOp == 0)
op1 = op2;
}
}
}