📄 calculator.java
字号:
* 3.关于事件<br>
*/
public void actionPerformed(ActionEvent e) {
if(e.getSource()==menuItemCopy){
//JOptionPane.showMessageDialog(null, "复制");
msg.selectAll();
msg.copy();
}
if(e.getSource()==menuItemCut){
//JOptionPane.showMessageDialog(null, "粘贴");
try {
Transferable t = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
if(t!=null && t.isDataFlavorSupported(DataFlavor.stringFlavor)){
//得到剪贴板中的字符串
String text = t.getTransferData(DataFlavor.stringFlavor).toString();
//得到 字符串中的 数字和. 得到的是数组。
String[] sp = text.split("[\\D&&[^.]]");
//从数组中得到最后一个数字
if(sp.length>0){
String str = sp[sp.length-1];
System.out.println(str);
//对得到的数字再次以.分割
String[] sp2 = str.split("\\.");
System.out.println(sp2.length);
//对于数组长度大于2的得到后两个数组成的小数
if(sp2.length>1){
String x = sp2[sp2.length-2];
text =( x.equals("")?"0":x)+"."+sp2[sp2.length-1];
}
//对于数组长度等于1的直接可以使用
//else if(sp2.length==1)
// text = sp2[sp2.length-1];
//对于数组长度等于0的
else
//text = sp[sp.length-1];
text = sp2[sp2.length-1];
msg.setText(text);
}
}
} catch (HeadlessException e1) {
System.out.println("错误:"+e1.getMessage());
} catch (UnsupportedFlavorException e1) {
System.out.println("错误:"+e1.getMessage());
} catch (IOException e1) {
System.out.println("错误:"+e1.getMessage());
}
}
if(e.getSource()==menuItemAbout){
//JOptionPane.showMessageDialog(null, "<html><body>程序参与人员 :<br>研发部总监 : 赵德奎<br>分 析 设 计 : 杨 强<br>代 码 编 写 : 小 猪<body></html>");
new About(this,"关于本计算器",true);
}
}
/**
* 按钮事件。包括+、-、*、/、1/x、数字等按钮事件。<br>
* 此类继承AbstractAction
* 2008-8-7
* @author 达内科技[Tarena Training Group]
* @version 1.0
* @since JDK1.6(建议)
*/
private class ButtonListener extends AbstractAction{
public void actionPerformed(ActionEvent e) {
//System.out.println("cpem");
//System.out.println(e.getActionCommand());
int i= 0;
//
for(i=0;i<buttons.length;i++){
if(e.getActionCommand().equals(buttons[i].getText()))
break;
}
double value2;
try {
value2 = Double.parseDouble(msg.getText());
} catch (NumberFormatException e1) {
System.out.println("错误:"+e1.getMessage());
value2 = 0;
}
switch(i){
case 0: //=
if(operation!=0){
double result = 0;
switch (operation) {
case 1:
result = value+value2;
break;
case 2:
result = value-value2;
break;
case 3:
result = value*value2;
break;
case 4:
result = value/value2;
break;
}
showResult(result+"");
hasPressed = false;
}
break;
case 1:
case 2: //+、-、*、/
case 3:
case 4:
if(operation!=0 && hasPressed){
countResult(value2);
}
value = Double.parseDouble(msg.getText());
if(tmp.length()>0){
tmp = new StringBuffer();
}
operation = i;
break;
case 5: //1/x
if(value2!=0)
showResult((1/value2)+"");
else
showResult("");
break;
case 6: //+/-
if(value2!=0)
showResult((value2*-1)+"");
break;
case 7: //sqrt
if(value2!=0)
showResult(Math.sqrt(value2)+"");
break;
case 8: //%
showResult((value*value2/100)+"");
break;
case 9: //.
if(isContain(tmp.toString(), "."))
break;
if(value2==0)
tmp.append(0);
value2 = -1;
case 10: //0-9
if(value2==0)
break;
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
if(tmp.length()<=allowLength){
tmp.append(buttons[i].getText());
msg.setText(tmp.toString());
if(operation!=0 && hasPressed==false)
hasPressed = true;
}
break;
case 20: //MC
if(hasSaved){
saveNum = 0;
hasSaved = false;
lblInfo.setText("");
}
break;
case 21: //MR
String result = saveNum+"";
msg.setText(result.endsWith(".0")?result.substring(0, result.length()-2):result);
break;
case 22: //MS
if(value2!=0){
saveNum = value2;
hasSaved = true;
lblInfo.setText("M");
}
break;
case 23: //M+
if(value2!=0){
saveNum += value2;
hasSaved = true;
lblInfo.setText("M");
}
break;
case 24: //Backspace
if(tmp.length()==1)
showResult("0");
if(tmp.length()>1){
tmp.deleteCharAt(tmp.length()-1);
msg.setText(tmp.toString());
}
break;
case 25: //CE
clearAll("0");
break;
case 26: //C
clearAll("0");
break;
}
}
}
/**
* 检测某字符串中是否包含某个字符串。
* @param str 待检测的字符串。
* @param ch 要包含的字符串。
* @return 包含返回true,否则false。
*/
private boolean isContain(String str,String ch){
return str.indexOf(ch)!=-1;
}
/**
* 设置计算的得到的结果。
* @param result 需要设置的结果。
*/
private void showResult(String result){
msg.setText(result.endsWith(".0")?result.substring(0, result.length()-2):result);
tmp = new StringBuffer();
//operation = 0;
}
/**
* 清空结果。
* @param result 需要设置的值。
*/
private void clearAll(String result){
showResult(result);
value = 0;
operation = 0;
hasPressed = false;
}
/**
* 计算结果并显示结果。
* @param value2 第二个操作数。
*/
private void countResult(double value2){
double result = 0;
switch (operation) {
case 1:
result = value+value2;
break;
case 2:
result = value-value2;
break;
case 3:
result = value*value2;
break;
case 4:
result = value/value2;
break;
}
showResult(result+"");
hasPressed = false;
value = result;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -