📄 calculator.java
字号:
btnMultiply.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(viewMenu_standarType.isSelected()){
setOperatorForStandar(e);
}
else{
setOperatorForScience(e);
}
}
});
//创建-按钮
btnMinus=new JButton("-");
btnMinus.setForeground(Color.RED);
btnMinus.setMargin(new Insets(0,1,2,1));
container.add(btnMinus);
btnMinus.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(viewMenu_standarType.isSelected()){
setOperatorForStandar(e);
}
else{
setOperatorForScience(e);
}
}
});
//创建+按钮
btnPlus=new JButton("+");
btnPlus.setForeground(Color.RED);
btnPlus.setMargin(new Insets(0,1,2,1));
container.add(btnPlus);
btnPlus.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(viewMenu_standarType.isSelected()){
setOperatorForStandar(e);
}
else{
setOperatorForScience(e);
}
}
});
//创建=按钮
btnEqualSign=new JButton("=");
btnEqualSign.setForeground(Color.RED);
btnEqualSign.setMargin(new Insets(0,1,2,1));
container.add(btnEqualSign);
btnEqualSign.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(isError==true||(isOperandBegin&&command.equals("="))){
return;
}
if(viewMenu_scienceType.isSelected()){
if(lbracketNum>0){
//必须补全右括弧方可进行整个式子的计算
return;
}
setOperatorForScience(e);
return;
}
String tempStr=getPlainStr(displayField.getText());
if(isFirstEqual){
secondOperand=tempStr;
calculateStandar(tempStr);
isOperandBegin=true;
isFirstEqual=false;
}
else
{
calculateStandar(secondOperand);
isOperandBegin=true;
}
isFirstOprator=true;
isDot=false;
canExp=false;
cbInv.setSelected(false);
cbHyp.setSelected(false);
}
});
//创建sqrt按钮
btnSqrt=new JButton("sqrt");
btnSqrt.setForeground(Color.BLUE);
btnSqrt.setMargin(new Insets(0,1,2,1));
container.add(btnSqrt);
btnSqrt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(isError==true){
return;
}
String tempStr=displayField.getText();
tempStr=tempStr.replace(",","");
if(viewMenu_numberGrouping.isSelected()){
decimalismFormat.setGroupingUsed(true);
}
else{
decimalismFormat.setGroupingUsed(false);
}
double num=0;
try{
num=java.lang.Double.parseDouble(tempStr);
if(num>=0){
decimalismFormat.setMaximumFractionDigits(31);
displayField.setText(decimalismFormat.format(Math.sqrt(num)));
}
else{
displayField.setText("函数输入无效。");
isError=true;
}
}
catch(NumberFormatException nfe){
}
isDot=false;
isOperandBegin=true;
}
});
//创建%按钮
btnPercent=new JButton("%");
btnPercent.setForeground(Color.BLUE);
btnPercent.setMargin(new Insets(0,1,2,1));
container.add(btnPercent);
btnPercent.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError==true){
return;
}
try{
String displayStr=displayField.getText();
DecimalFormat df=new DecimalFormat();
Object obj=df.parse(displayStr);
BigDecimal bd=new BigDecimal(obj.toString());
String tempStr=Arith.div(bd.toString(),"100").toString();
displayField.setText(decimalismFormat.format(Arith.mul(result,tempStr)));
}
catch(NumberFormatException e){
}
catch (ParseException pe) {
pe.printStackTrace();
}
isDot=false;
isOperandBegin=true;
}
});
//创建1/x按钮
btnReciprocal=new JButton("1/x");
btnReciprocal.setMargin(new Insets(0,1,2,1));
container.add(btnReciprocal);
btnReciprocal.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError==true){
return;
}
try{
String displayStr=displayField.getText();
double num=Double.parseDouble(displayStr);
if(!viewMenu_numberGrouping.isSelected()){
decimalismFormat.setGroupingUsed(false);
}
else{
decimalismFormat.setGroupingUsed(true);
}
if(num!=0){
BigDecimal bd;
if(isFirstReciprocal==true){
bd=Arith.div("1",displayStr.replace(",",""));
bottomNum=bd.toString();
isFirstReciprocal=false;
}else{
bd=Arith.div("1",bottomNum);
isFirstReciprocal=true;
}
if(bd.toString().length()>=31){
displayField.setText(new DecimalFormat("0.###############################E0").format(bd));
String testStr=displayField.getText();
String strscale=testStr.substring(testStr.indexOf("E")+1,testStr.length());
int scale=Integer.parseInt(strscale);
if(scale>=-32&&scale<31){
displayField.setText(decimalismFormat.format(bd));
}
isOperandBegin=true;
return;
}
displayField.setText(decimalismFormat.format(bd));
}
else{
displayField.setText("除数不能为0。");
isError=true;
}
}
catch(NumberFormatException nfe){
}
isOperandBegin=true;
isDot=false;
}
});
//创建pi按钮
btnPI=new JButton("pi");
btnPI.setForeground(Color.BLUE);
btnPI.setMargin(new Insets(0,1,2,1));
container.add(btnPI);
btnPI.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError==true){
return;
}
if(cbInv.isSelected()==true){
displayField.setText(2*Math.PI+"");
cbInv.setSelected(false);
}
else{
displayField.setText(Math.PI+"");
}
isOperandBegin=true;
isDot=true;
}
});
//创建Mod按钮
btnMod=new JButton("Mod");
btnMod.setForeground(Color.RED);
btnMod.setMargin(new Insets(0,1,2,1));
container.add(btnMod);
btnMod.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(viewMenu_standarType.isSelected()){
setOperatorForStandar(e);
}
else{
setOperatorForScience(e);
}
}
});
//创建Or按钮
btnOr=new JButton("Or");
btnOr.setForeground(Color.RED);
btnOr.setMargin(new Insets(0,1,2,1));
container.add(btnOr);
btnOr.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(viewMenu_standarType.isSelected()){
setOperatorForStandar(e);
}
else{
setOperatorForScience(e);
}
}
});
//创建Lsh按钮
btnLsh=new JButton("Lsh");
btnLsh.setForeground(Color.RED);
btnLsh.setMargin(new Insets(0,1,2,1));
container.add(btnLsh);
btnLsh.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(viewMenu_standarType.isSelected()){
setOperatorForStandar(e);
}
else{
setOperatorForScience(e);
}
}
});
//创建And按钮
btnAnd=new JButton("And");
btnAnd.setForeground(Color.RED);
btnAnd.setMargin(new Insets(0,1,2,1));
container.add(btnAnd);
btnAnd.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(viewMenu_standarType.isSelected()){
setOperatorForStandar(e);
}
else{
setOperatorForScience(e);
}
}
});
//创建Xor按钮
btnXor=new JButton("Xor");
btnXor.setForeground(Color.RED);
btnXor.setMargin(new Insets(0,1,2,1));
container.add(btnXor);
btnXor.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(viewMenu_standarType.isSelected()){
setOperatorForStandar(e);
}
else{
setOperatorForScience(e);
}
}
});
//创建Not按钮
btnNot=new JButton("Not");
btnNot.setForeground(Color.RED);
btnNot.setMargin(new Insets(0,1,2,1));
container.add(btnNot);
btnNot.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError){
return;
}
String str=displayField.getText();
str=str.replace(",","");
if(str.indexOf(".")!=-1){
str=str.substring(0,str.indexOf("."));
}
if(rbHexadecimal.isSelected()){
str=CarryConvert.todec(str,16).toString();
}
else if(rbOctal.isSelected()){
str=CarryConvert.todec(str,8).toString();
}
else if(rbBinary.isSelected()){
str=CarryConvert.todec(str,2).toString();
}
try{
int num=Integer.parseInt(str);
num=~num;//进行取反操作
setGroupingState();
if(rbHexadecimal.isSelected()){
str=Integer.toHexString(num);
}
else if(rbOctal.isSelected()){
str=Integer.toOctalString(num);
}
else if(rbBinary.isSelected()){
str=Integer.toBinaryString(num);
}
else{
str=num+"";
}
displayField.setText(str);
isOperandBegin=true;
isDot=false;
}
catch(NumberFormatException nfe){
JOptionPane.showMessageDialog(null,"对不起,该数值已超出本计算器的计算范围!计算中止!","提示",JOptionPane.ERROR_MESSAGE);
displayField.setText("计算操作中止。");
isError=true;
return;
}
}
});
//创建Int按钮
btnInt=new JButton("Int");
btnInt.setForeground(Color.RED);
btnInt.setMargin(new Insets(0,1,2,1));
container.add(btnInt);
btnInt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
if(isError){
return;
}
String str=displayField.getText();
str=str.replace(",","");
double num=Double.parseDouble(str);
if(cbInv.isSelected()){
displayField.setText((num-Math.floor(num))+"");
cbInv.setSelected(false);
}else{
displayField.setText(Math.floor(num)+"");
}
isOperandBegin=true;
isDot=false;
}
});
//改变标题栏窗口左侧默认图标
Toolkit tk=Toolkit.getDefaultToolkit();
Image image=tk.createImage("icons/calculator.png");
this.setIconImage(image);
//创建统计框
dlgStatistic=new JFrame("统计框");
dlgStatistic.setSize(227,163);
dlgStatistic.setLocationRelativeTo(this);
dlgStatistic.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
//清空JList里的内容
vecListData.removeAllElements();
btnAve.setEnabled(false);
btnSum.setEnabled(false);
btnS.setEnabled(false);
btnDat.setEnabled(false);
dlgStatistic.setVisible(false);
}
});
dlgcon=dlgStatistic.getContentPane();
dlgcon.setLayout(null);
//创建数据显示列表
vecListData=new Vector();
datalist=new JList(vecListData);
datalist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
datalist.setVisibleRowCount(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -