📄 calculator.java
字号:
/**
* @(#)Calculator.java
*
*
* @author ehtPossible高则宝 061251032
* @version 1.00 2007/5/29
*/
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import javax.swing.*;
public class Calculator extends JFrame implements ActionListener{
//定义面板上的各种JButton、JradioButton、TextField
JRadioButton jrbHex = new JRadioButton("Hex");
JRadioButton jrbDec = new JRadioButton("Dec");
ButtonGroup group1 = new ButtonGroup();
JRadioButton jrbRad = new JRadioButton("Radian");
JRadioButton jrbAng = new JRadioButton("Angle");
ButtonGroup group2 = new ButtonGroup();
JButton jbtBackSpace= new JButton("BackSpace");
JButton jbtC1 = new JButton("C");
JButton[] jbtArray1 = {jbtBackSpace, jbtC1};
JButton jbt1 = new JButton("1"); JButton jbt2 = new JButton("2"); JButton jbt3 = new JButton("3");
JButton jbt4 = new JButton("4"); JButton jbt5 = new JButton("5"); JButton jbt6 = new JButton("6");
JButton jbt7 = new JButton("7"); JButton jbt8 = new JButton("8"); JButton jbt9 = new JButton("9");
JButton jbtA = new JButton("A"); JButton jbt0 = new JButton("0"); JButton jbtPoint = new JButton(".");
JButton jbtB = new JButton("B"); JButton jbtC = new JButton("C"); JButton jbtD = new JButton("D");
JButton[] jbtArray2 = {jbt7, jbt8, jbt9, jbt4, jbt5, jbt6, jbt1, jbt2, jbt3, jbtA, jbt0, jbtPoint, jbtB, jbtC, jbtD};
JButton jbtDiv = new JButton("/"); JButton jbtMod = new JButton("mod"); JButton jbtMul = new JButton("*");
JButton jbtFac = new JButton("n!"); JButton jbtMin = new JButton("-"); JButton jbtRec = new JButton("1/x");
JButton jbtPlu = new JButton("+"); JButton jbtEqu = new JButton("="); JButton jbtE = new JButton("E");
JButton jbtF = new JButton("F");
JButton[] jbtArray3 = {jbtDiv, jbtMod, jbtMul, jbtFac, jbtMin, jbtRec, jbtPlu, jbtEqu, jbtE, jbtF};
JButton jbtPow = new JButton("x^y"); JButton jbtBracket1 = new JButton("("); JButton jbtBracket2 = new JButton(")");
JButton jbtLn = new JButton("ln"); JButton jbtLg = new JButton("lg"); JButton jbtExp = new JButton("exp");
JButton jbtSqu = new JButton("x^2"); JButton jbtCub = new JButton("x^3"); JButton jbtSqrt = new JButton("sqrt");
JButton jbtSin = new JButton("sin"); JButton jbtCos = new JButton("cos"); JButton jbtE2 = new JButton("e");
JButton jbtTan = new JButton("tan"); JButton jbtCot = new JButton("cot"); JButton jbtPi = new JButton("pi");
JButton[] jbtArray4 = {jbtPow, jbtBracket1, jbtBracket2, jbtLn, jbtLg, jbtExp, jbtSqu, jbtCub, jbtSqrt, jbtSin, jbtCos, jbtE2, jbtTan, jbtCot, jbtPi};
JButton[] jbtHex = {jbtA, jbtB, jbtC, jbtD, jbtE, jbtF};
JTextField jtfMessage = new JTextField(10);
int NUM_OF_OPERAND = 0;
//主函数
public static void main(String[] args){
Calculator frame = new Calculator();
frame.setTitle("Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(450,260);
frame.setVisible(true);
}
//Calculate类处理计算读入的字符串,创建其对象
Calculate cal = new Calculate();
public Calculator(){
group1.add(jrbHex); group1.add(jrbDec);
group2.add(jrbRad); group2.add(jrbAng);
JPanel p0 = new JPanel();
p0.setLayout(new FlowLayout());
p0.add(jrbHex); p0.add(jrbDec);
JPanel p00 = new JPanel();
p00.setLayout(new FlowLayout());
p00.add(jrbRad); p00.add(jrbAng);
JPanel p1 = new JPanel();
p1.setLayout(new FlowLayout());
for(int i = 0; i < 2; i++){
p1.add(jbtArray1[i]);
}
JPanel p2 = new JPanel();
p2.setLayout(new GridLayout(5, 3, 3, 3));
for(int i = 0; i < 15; i++){
p2.add(jbtArray2[i]);
}
JPanel p3 = new JPanel();
p3.setLayout(new GridLayout(5,2,3,3));
for(int i = 0; i < 10; i++){
p3.add(jbtArray3[i]);
}
JPanel p4 = new JPanel();
p4.setLayout(new GridLayout(5,3,3,3));
for(int i = 0; i < 15; i++){
p4.add(jbtArray4[i]);
}
JPanel p01 = new JPanel();
p01.setLayout(new FlowLayout());
p01.add(p0);
p01.add(p00);
p01.add(p1);
JPanel p234 = new JPanel();
p234.setLayout(new BorderLayout(5,0));
p234.add(p4,BorderLayout.WEST);
p234.add(p2,BorderLayout.CENTER);
p234.add(p3,BorderLayout.EAST);
JPanel p01234 = new JPanel();
p01234.setLayout(new BorderLayout(5,0));
p01234.add(p234,BorderLayout.CENTER);
p01234.add(p01,BorderLayout.NORTH);
getContentPane().add(jtfMessage,BorderLayout.NORTH);
getContentPane().add(p01234,BorderLayout.CENTER);
//注册JButton、JRadioButton、JTextField
for(int i = 0; i < 2; i++){
jbtArray1[i].addActionListener(this);
}
for(int i = 0; i < 15; i++){
jbtArray2[i].addActionListener(this);
}
for(int i = 0; i < 10; i++){
jbtArray3[i].addActionListener(this);
}
for(int i = 0; i < 15; i++){
jbtArray4[i].addActionListener(this);
}
jtfMessage.addActionListener(this);
jrbHex.addActionListener(this); jrbDec.addActionListener(this);
jrbRad.addActionListener(this); jrbAng.addActionListener(this);
//初始选中十进制,十六进制中A到F中字符不可用 三角函数计算初始使用角度制
jrbDec.setSelected(true);
for(int i = 0; i < 6; i++){
jbtHex[i].setEnabled(false);
}
jrbAng.setSelected(true);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == jrbHex){
jbtPoint.setEnabled(false);
jbtSin.setEnabled(false);
jbtExp.setEnabled(false); jbtCos.setEnabled(false);
jbtSqrt.setEnabled(false); jbtTan.setEnabled(false);
jbtE2.setEnabled(false); jbtCot.setEnabled(false);
jbtPi.setEnabled(false); jbtExp.setEnabled(false);
jbtRec.setEnabled(false);
for(int i = 0; i < 6; i++){
jbtHex[i].setEnabled(true);
}
cal.hexDec = 16;
if(jtfMessage.getText() != "")
jtfMessage.setText("");
}
else if(e.getSource() == jrbDec){
jbtPoint.setEnabled(true);
jbtSin.setEnabled(true);
jbtExp.setEnabled(true); jbtCos.setEnabled(true);
jbtSqrt.setEnabled(true); jbtTan.setEnabled(true);
jbtE2.setEnabled(true); jbtCot.setEnabled(true);
jbtPi.setEnabled(true); jbtExp.setEnabled(true);
jbtRec.setEnabled(true);
for(int i = 0; i < 6; i++){
jbtHex[i].setEnabled(false);
}
cal.hexDec = 10;
if(jtfMessage.getText() != "")
jtfMessage.setText("");
}
else if(e.getSource() == jrbRad){
cal.radAng = 0;
if(jtfMessage.getText() != "")
jtfMessage.setText("");
}
else if(e.getSource() == jrbAng){
cal.radAng = 1;
if(jtfMessage.getText() != "")
jtfMessage.setText("");
}
//按BackSpace键时,如果是sin,cos,tan,cot,lg,ln等符号,一次全部删除,如果文本区为空,不进行任何操作
else if(e.getSource() == jbtBackSpace){
if(jtfMessage.getText() == ""){
}
if (jtfMessage.getText().length() > 0){
if(jtfMessage.getText().charAt(jtfMessage.getText().length()-1) == 's'
|| jtfMessage.getText().charAt(jtfMessage.getText().length()-1) == 't'){
jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-3));
jtfMessage.requestFocus();
}
else if(jtfMessage.getText().charAt(jtfMessage.getText().length()-1) == 'g'){
jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-2));
jtfMessage.requestFocus();
}
else if(jtfMessage.getText().charAt(jtfMessage.getText().length()-1) == 'n'){
if(jtfMessage.getText().charAt(jtfMessage.getText().length()-2) == 'l')
jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-2));
else
jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-3));
}
else{
jtfMessage.setText(jtfMessage.getText().substring(0,jtfMessage.getText().length()-1));
jtfMessage.requestFocus();
}}
}
else if(e.getSource() == jbtC1){
jtfMessage.setText("");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtPow){
jtfMessage.setText(jtfMessage.getText() + "^");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtSqu){
jtfMessage.setText(jtfMessage.getText() + "^2");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtCub){
jtfMessage.setText(jtfMessage.getText() + "^3");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtSqrt){
jtfMessage.setText(jtfMessage.getText() + "^0.5");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtExp){
jtfMessage.setText(jtfMessage.getText() + String.valueOf(Math.E) + "^");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtFac){
jtfMessage.setText(jtfMessage.getText() + "!");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtMod){
jtfMessage.setText(jtfMessage.getText() + "|");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtRec){
jtfMessage.setText(jtfMessage.getText() + "1/");
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtE2){
jtfMessage.setText(jtfMessage.getText() + String.valueOf(Math.E));
jtfMessage.requestFocus();
}
else if(e.getSource() == jbtPi){
if(cal.radAng == 1)
jtfMessage.setText(jtfMessage.getText() + "180");
else
jtfMessage.setText(jtfMessage.getText() + String.valueOf(Math.PI));
jtfMessage.requestFocus();
}
//按下等于号时将文本区中字符串作为Calculate类中DoCalculate方法的参数,在文本区中显示计算结果
else if(e.getSource() == jbtEqu){
jtfMessage.setText(cal.DoCalculate(jtfMessage.getText()));
jtfMessage.requestFocus();
}
else{
jtfMessage.setText(jtfMessage.getText() + e.getActionCommand());
jtfMessage.requestFocus();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -