📄 calculator.java
字号:
String strTemp = CalUtil.calculate(OP_1, OP, OP_2);
if (strTemp.length() == 4 && strTemp.startsWith("ERR")) {
CalUtil.show_error_msg(txfDisplay, Integer.parseInt(strTemp
.substring(3)));
chrStates = 'E';
return;
} else {// calculated without error
txfDisplay.setBufText(strTemp);
Result = strTemp;
IS_RESULT_EDITED = false;
chrStates = 'R';
return;
}
} else if (strActionCmd.equals("Back")) {// e: Back
txfDisplay.backSpace(IS_OP2_EDITED);
} else if (strActionCmd.equals("CE")) {// f: CE
txfDisplay.setBufText("0");
chrStates = 'C';
} else if (strActionCmd.equals("C")) {// g: Reset
Calculator.reset();
} else if (strActionCmd.equals(".")) {// h: Dot
if (NUMBER_HAS_DOT)
return;
else {// no dot
txfDisplay.concatBufText(strActionCmd);
NUMBER_HAS_DOT = true;
IS_OP2_EDITED = true;
}
} else if (CalUtil.isMemOp(strActionCmd)) {
char chrTemp = strActionCmd.charAt(1);
switch (chrTemp) {
case 'C':
lblMem.memory_mc();
break;
case 'R':
lblMem.memory_mr(txfDisplay);
IS_OP2_EDITED = false;
break;
case 'S':
lblMem.memory_ms(txfDisplay.getBufText());
IS_OP2_EDITED = false;
break;
case '+':
lblMem.memory_mp(txfDisplay.getBufText());
IS_OP2_EDITED = false;
break;
default:
}
} else {
return;
}
}
public static void state_R_dispose(String strActionCmd) {
chrStates = 'R';
if (txfDisplay.getBufText().equals("0"))
IS_RESULT_EDITED = false;
if (txfDisplay.getBufText().indexOf(".") >= 0)
NUMBER_HAS_DOT = true;
else
NUMBER_HAS_DOT = false;
if (strActionCmd.length() == 1
&& Character.isDigit(strActionCmd.charAt(0))) {// a: 0~9
if (!IS_RESULT_EDITED) {// is not edited
txfDisplay.setBufText(strActionCmd);
IS_RESULT_EDITED = true;
} else {
txfDisplay.concatBufText(strActionCmd);
}
} else if (strActionCmd.equals(".")) {// h: Dot
if (!IS_RESULT_EDITED) {
txfDisplay.setBufText("0.");
IS_RESULT_EDITED = true;
NUMBER_HAS_DOT = true;
} else if (IS_RESULT_EDITED && !NUMBER_HAS_DOT) {
txfDisplay.concatBufText(strActionCmd);
IS_RESULT_EDITED = true;
NUMBER_HAS_DOT = true;
}
} else if (CalUtil.isOperator1(strActionCmd)) {// b: + - * /
OP_1 = txfDisplay.getBufText();
OP = strActionCmd;
chrStates = 'B';
} else if (CalUtil.isOperator2(strActionCmd)) {// c: operator2=>
// sqrt,%,+/-,1/x
String strTemp = "";
if (strActionCmd.equals("%")) {
strTemp = CalUtil.calculate(Result, strActionCmd, txfDisplay
.getBufText());
} else {
strTemp = CalUtil.calculate(txfDisplay.getBufText(),
strActionCmd);
}
if (strTemp.length() == 4 && strTemp.startsWith("ERR")) {
CalUtil.show_error_msg(txfDisplay, Integer.parseInt(strTemp
.substring(3)));
chrStates = 'E';
return;
} else {// calculated without error
txfDisplay.setBufText(strTemp);
OP_2 = strTemp;
IS_RESULT_EDITED = false;
return;
}
} else if (strActionCmd.equals("=")) {// d: =
String strTemp = "";
if (CalUtil.isOperator1(OP)) {
strTemp = CalUtil.calculate(Result, OP, OP_2);
} else if (CalUtil.isOperator2(OP)) {
strTemp = CalUtil.calculate(Result, OP);
}
if (strTemp.length() == 4 && strTemp.startsWith("ERR")
|| strTemp.equals("")) {
CalUtil.show_error_msg(txfDisplay, Integer.parseInt(strTemp
.substring(3)));
chrStates = 'E';
return;
} else {// calculated without error
txfDisplay.setBufText(strTemp);
Result = strTemp;
IS_RESULT_EDITED = false;
return;
}
} else if (strActionCmd.equals("Back")) {// e: Back
if (IS_RESULT_EDITED == true)
txfDisplay.backSpace(IS_RESULT_EDITED);
} else if (strActionCmd.equals("CE")) {// f: CE
txfDisplay.setBufText("0");
} else if (strActionCmd.equals("C")) {// g: Reset
Calculator.reset();
} else if (CalUtil.isMemOp(strActionCmd)) {
char chrTemp = strActionCmd.charAt(1);
switch (chrTemp) {
case 'C':
lblMem.memory_mc();
break;
case 'R':
lblMem.memory_mr(txfDisplay);
IS_RESULT_EDITED = false;
break;
case 'S':
lblMem.memory_ms(txfDisplay.getBufText());
IS_RESULT_EDITED = false;
break;
case '+':
lblMem.memory_mp(txfDisplay.getBufText());
IS_RESULT_EDITED = false;
break;
default:
}
}
}
public static void state_E_dispose(String strActionCmd) {
chrStates = 'E';
if (strActionCmd.equals("C") || strActionCmd.equals("CE")) {
Calculator.reset();
chrStates = 'A';
}
}
class ButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent ae) {
String strActionCmd = ae.getActionCommand().trim();
switch (chrStates) {
case 'A':
state_A_dispose(strActionCmd);
break;
case 'B':
state_B_dispose(strActionCmd);
break;
case 'C':
state_C_dispose(strActionCmd);
break;
case 'R':
state_R_dispose(strActionCmd);
break;
case 'E':
state_E_dispose(strActionCmd);
break;
default:
}
if (!strActionCmd.equals("=")) {
Zensousa = strActionCmd;
}
}
}
class KeyHandler implements KeyListener {
public void keyTyped(KeyEvent ke) {
char chrKey = ke.getKeyChar();
String strActionCmd = String.valueOf(chrKey);
if (chrKey == KeyEvent.VK_ENTER) {
strActionCmd = "=";
} else if (chrKey == KeyEvent.VK_DELETE) {
strActionCmd = "C";
} else if (chrKey == KeyEvent.VK_BACK_SPACE) {
strActionCmd = "Back";
}
switch (chrStates) {
case 'A':
state_A_dispose(strActionCmd);
break;
case 'B':
state_B_dispose(strActionCmd);
break;
case 'C':
state_C_dispose(strActionCmd);
break;
case 'R':
state_R_dispose(strActionCmd);
break;
case 'E':
state_E_dispose(strActionCmd);
break;
default:
}
}
public void keyPressed(KeyEvent ke) {
}
public void keyReleased(KeyEvent ke) {
}
}
class WindowHandler implements WindowListener {
public void windowOpened(WindowEvent we) {
}
public void windowIconified(WindowEvent we) {
}
public void windowDeiconified(WindowEvent we) {
}
public void windowClosing(WindowEvent we) {
System.exit(0);
}
public void windowClosed(WindowEvent we) {
}
public void windowActivated(WindowEvent we) {
}
public void windowDeactivated(WindowEvent we) {
}
}
class MenuItemHandler implements ItemListener, ActionListener,
ClipboardOwner {
/*
* (non-Javadoc)
*
* @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
*/
//it is only used for checkBoxAction in this program
public void itemStateChanged(ItemEvent ie) {
JCheckBoxMenuItem target = (JCheckBoxMenuItem) ie.getSource();
String strActionCmd = target.getActionCommand();
if (strActionCmd.equals("Ketakugiru")) {
KUGIRU = target.getState();
txfDisplay.display();
}
}
/*
* (non-Javadoc)
*
* @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
*/
public void actionPerformed(ActionEvent ae) {
if (chrStates == 'E')
return;
Clipboard clipboard = Toolkit.getDefaultToolkit()
.getSystemClipboard();
JMenuItem target = (JMenuItem) ae.getSource();
String strActionCmd = target.getActionCommand();
if (strActionCmd.equals("copy")) {// the copy operation
String srcData = txfDisplay.getBufText();
StringSelection contents = new StringSelection(srcData);
clipboard.setContents(contents, this);
} else if (strActionCmd.equals("paste")) {// the paste operation
Transferable contents = clipboard.getContents(this);
String dstData;
if (contents == null)
return;
try {
dstData = (String) contents
.getTransferData(DataFlavor.stringFlavor);
} catch (Exception e) {// invalid data
CalUtil.show_error_msg(txfDisplay, 3);
chrStates = 'E';
return;
}
get_number_and_paste(dstData);
} else if (strActionCmd.equals("typecomm")) {
return;
} else if (strActionCmd.equals("typefunc")) {
return;
} else if (strActionCmd.equals("version")) {
Object[] options = { "OK" };
JOptionPane.showOptionDialog(null, CalUtil.Help_VerDialog_Info,
CalUtil.Help_VerDialog_Title,
JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE, null, //don't use a
// custom Icon
options, //the titles of buttons
options[0]); //default button title
} else if (strActionCmd.equals("topic")) {
Object[] options = { "OK" };
JOptionPane.showOptionDialog(null,
CalUtil.Help_TopicDialog_Info,
CalUtil.Help_TopicDialog_Title,
JOptionPane.DEFAULT_OPTION,
JOptionPane.INFORMATION_MESSAGE, null, //don't use a
// custom Icon
options, //the titles of buttons
options[0]); //default button title
}
}
public void get_number_and_paste(String dstData) {
if (dstData == null || dstData.equals(""))
return;
String strNumTemp = "";
boolean blnDotTemp = false;
for (int i = 0; i < dstData.length(); i++) {//get the number
if (Character.isDigit(dstData.charAt(i))) {
strNumTemp += dstData.substring(i, i + 1);
} else if (dstData.charAt(i) == '.' && blnDotTemp == false
&& strNumTemp.length() != 0) {
strNumTemp += ".";
blnDotTemp = true;
}//else
}//for
if (strNumTemp.equals("")) {//no data is number
// Error dispose
CalUtil.show_error_msg(txfDisplay, 3);
chrStates = 'E';
return;
}
// if the contents got is number, then paste
txfDisplay.setBufText("");
for (int i = 0; i < strNumTemp.length(); i++) {
String strActionCmd = strNumTemp.substring(i, i + 1);
switch (chrStates) {
case 'A':
state_A_dispose(strActionCmd);
break;
case 'B':
state_B_dispose(strActionCmd);
break;
case 'C':
state_C_dispose(strActionCmd);
break;
case 'R':
state_R_dispose(strActionCmd);
break;
case 'E':
state_E_dispose(strActionCmd);
break;
default:
}
}
}
//inherited method
public void lostOwnership(Clipboard clipboard, Transferable contents) {
}
}//MenuItemHandler
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -