📄 calculator.java
字号:
int explength=displayField.getText().length()-displayField.getText().indexOf("+")-1;
if(explength==1){
displayField.setText(displayField.getText().substring(0,displayField.getText().length()-1)+"0");
}
else{
displayField.setText(displayField.getText().substring(0,displayField.getText().length()-1));
}
}
return;
}
if(rbBinary.isSelected()||rbHexadecimal.isSelected()||rbOctal.isSelected()){
if(displayStr.equals("0")||isOperandBegin==true){
return;
}
else{
if(displayStr.length()==1){
displayField.setText("0");
isOperandBegin=true;
return;
}
displayField.setText(displayStr.substring(0,displayStr.length()-1));
return;
}
}
if(isDot==true){
if(displayStr.endsWith(".")){
isDot=false;
}
else{
displayField.setText(displayStr.substring(0,displayStr.length()-1));
}
}
else{
try {
//基于格式的解析
DecimalFormat df=new DecimalFormat();
df.setParseBigDecimal(true);
Object obj= null;
obj = df.parse(displayStr);
StringBuffer sb=new StringBuffer(obj.toString());
if(sb.toString().charAt(0)=='-'){
if(sb.toString().length()==2){
displayField.setText("0.");
return;
}
}
else{
if(sb.toString().length()==1){
displayField.setText("0.");
return;
}
}
sb.deleteCharAt(sb.toString().length()-1);
BigDecimal bd=new BigDecimal(sb.toString());
displayField.setText(decimalismFormat.format(bd));
}
catch (ParseException pe) {
pe.printStackTrace();
}
}
}
});
//创建CE按钮
btnCE=new JButton("CE");
btnCE.setForeground(Color.RED);
btnCE.setMargin(new Insets(0,1,2,1));
container.add(btnCE);
btnCE.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError==true){
if(rbHexadecimal.isSelected()||rbOctal.isSelected()||rbBinary.isSelected()){
displayField.setText("0");
}else{
displayField.setText("0.");
}
isDot=false;
isError=false;
isOperandBegin=true;
isFirstOprator=false;
isFirstEqual=false;
isFirstPercent=true;
isFirstReciprocal=true;
firstOperand="0";
secondOperand="0";
result="0";
}
else{
if(rbHexadecimal.isSelected()||rbOctal.isSelected()||rbBinary.isSelected()){
displayField.setText("0");
}else{
displayField.setText("0.");
}
isDot=false;
isOperandBegin=true;
isError=false;
}
}
});
//创建C按钮
btnClear=new JButton("C");
btnClear.setForeground(Color.RED);
btnClear.setMargin(new Insets(0,1,2,1));
container.add(btnClear);
btnClear.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
resetAllVar();
}
});
//创建Sta按钮
btnSta=new JButton("Sta");
btnSta.setForeground(Color.BLUE);
btnSta.setMargin(new Insets(0,1,2,1));
container.add(btnSta);
btnSta.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(dlgStatistic.isVisible()==true){
return;
}
else{
btnAve.setEnabled(true);
btnSum.setEnabled(true);
btnS.setEnabled(true);
btnDat.setEnabled(true);
dlgStatistic.setVisible(true);
}
}
});
//创建Ave按钮
btnAve=new JButton("Ave");
btnAve.setForeground(Color.BLUE);
btnAve.setMargin(new Insets(0,1,2,1));
container.add(btnAve);
btnAve.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(vecListData.size()>0){
if(cbInv.isSelected()==true){
displayField.setText(ScienceArith.invave(vecListData,vecListData.size())+"");
cbInv.setSelected(false);
}else{
displayField.setText(ScienceArith.ave(vecListData,vecListData.size())+"");
}
isOperandBegin=true;
isDot=false;
}
}
});
//创建Sum按钮
btnSum=new JButton("Sum");
btnSum.setForeground(Color.BLUE);
btnSum.setMargin(new Insets(0,1,2,1));
container.add(btnSum);
btnSum.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(vecListData.size()>0){
if(cbInv.isSelected()==true){
displayField.setText(ScienceArith.invsum(vecListData,vecListData.size())+"");
cbInv.setSelected(false);
}else{
displayField.setText(ScienceArith.sum(vecListData,vecListData.size())+"");
}
isOperandBegin=true;
isDot=false;
}
}
});
//创建S按钮
btnS=new JButton("s");
btnS.setForeground(Color.BLUE);
btnS.setMargin(new Insets(0,1,2,1));
container.add(btnS);
btnS.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(vecListData.size()>0){
if(cbInv.isSelected()==true){
displayField.setText(ScienceArith.invstddeviation(vecListData,vecListData.size())+"");
cbInv.setSelected(false);
}else{
displayField.setText(ScienceArith.stddeviation(vecListData,vecListData.size())+"");
}
isOperandBegin=true;
isDot=false;
}
}
});
//创建Dat按钮
btnDat=new JButton("Dat");
btnDat.setForeground(Color.BLUE);
btnDat.setMargin(new Insets(0,1,2,1));
container.add(btnDat);
btnDat.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String displayStr=displayField.getText();
displayStr=displayStr.replace(",","");
vecListData.addElement(displayStr);
datalist.setListData(vecListData);
datalist.setSelectedIndex(vecListData.lastIndexOf(displayStr));
lblDataCount.setText("n="+vecListData.size());
isOperandBegin=true;
isDot=false;
}
});
//创建FE按钮
btnFE=new JButton("F-E");
btnFE.setForeground(Color.MAGENTA);
btnFE.setMargin(new Insets(0,1,2,1));
container.add(btnFE);
btnFE.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError){
return;
}
showFE();
}
});
//创建Dms按钮
btnDms=new JButton("dms");
btnDms.setForeground(Color.MAGENTA);
btnDms.setMargin(new Insets(0,1,2,1));
container.add(btnDms);
btnDms.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError){
return;
}
DecimalFormat df=new DecimalFormat();
df.setMaximumFractionDigits(10);
String str=displayField.getText();
str=str.replace(",","");
double num=Double.parseDouble(str);
if(cbInv.isSelected()){
displayField.setText(df.format(ScienceArith.invdms(num)));
cbInv.setSelected(false);
}else{
displayField.setText(df.format(ScienceArith.dms(num)));
}
isOperandBegin=true;
isOperandBegin=false;
}
});
//创建Sin按钮
btnSin=new JButton("sin");
btnSin.setForeground(Color.MAGENTA);
btnSin.setMargin(new Insets(0,1,2,1));
container.add(btnSin);
btnSin.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError==true){
return;
}
double num=Double.parseDouble(displayField.getText().replace(",",""));//弧度表示
if(cbInv.isSelected()&&cbHyp.isSelected()){
//求asinh(反双曲函数
displayField.setText(decimalismFormat.format(new BigDecimal(ScienceArith.asinh(num))));
cbHyp.setSelected(false);
cbInv.setSelected(false);
}
else if(!cbInv.isSelected()&&cbHyp.isSelected()){
//求sinh(双曲函数)
displayField.setText(decimalismFormat.format(new BigDecimal(Math.sinh(num))));
cbHyp.setSelected(false);
}
else if(cbInv.isSelected()&&!cbHyp.isSelected()){
//求asin(反函数)
if(num>1||num<-1){
displayField.setText("函数输入无效。");
isError=true;
return;
}
else{
if(rbAngle.isSelected()){
num=Math.asin(num);
displayField.setText(ScienceArith.rad_to_deg(num)+"");
}else if(rbGrads.isSelected()){
num=Math.asin(num);
displayField.setText(ScienceArith.rad_to_grad(num)+"");
}else{
displayField.setText(Math.asin(num)+"");
}
}
cbInv.setSelected(false);
}
else if(!cbInv.isSelected()&&!cbHyp.isSelected()){
//直接求sin(三角函数)
DecimalFormat df=new DecimalFormat();
df.setMaximumFractionDigits(15);
df.setDecimalSeparatorAlwaysShown(true);
if(rbAngle.isSelected()){
num=ScienceArith.deg_to_rad(num);
displayField.setText(Math.sin(num)+"");
}else if(rbGrads.isSelected()){
num=ScienceArith.grad_to_rad(num);
displayField.setText(Math.sin(num)+"");
}else{
displayField.setText(df.format(Math.sin(num)));
}
}
isOperandBegin=true;
isDot=false;
}
});
//创建Cos按钮
btnCos=new JButton("cos");
btnCos.setForeground(Color.MAGENTA);
btnCos.setMargin(new Insets(0,1,2,1));
container.add(btnCos);
btnCos.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError==true){
return;
}
double num=Double.parseDouble(displayField.getText().replace(",",""));//弧度表示
if(cbInv.isSelected()&&cbHyp.isSelected()){
//求acosh(反双曲余弦函数
//其定义域为:[1,+∞);
if(num<1){
displayField.setText("函数输入无效。");
isError=true;
return;
}
displayField.setText(decimalismFormat.format(new BigDecimal(ScienceArith.acosh(num))));
cbHyp.setSelected(false);
cbInv.setSelected(false);
}
else if(!cbInv.isSelected()&&cbHyp.isSelected()){
//求cosh(双曲余弦函数)
//定义域为:(-∞,+∞);
displayField.setText(decimalismFormat.format(new BigDecimal(Math.cosh(num))));
cbHyp.setSelected(false);
}
else if(cbInv.isSelected()&&!cbHyp.isSelected()){
//求acos(反余弦函数)
//定义域为:[-1,1];
if(num>1||num<-1){
displayField.setText("函数输入无效。");
isError=true;
return;
}
else{
if(rbAngle.isSelected()){
num=Math.acos(num);
displayField.setText(ScienceArith.rad_to_deg(num)+"");
}else if(rbGrads.isSelected()){
num=Math.acos(num);
displayField.setText(ScienceArith.rad_to_grad(num)+"");
}else{
displayField.setText(Math.acos(num)+"");
}
}
cbInv.setSelected(false);
}
else if(!cbInv.isSelected()&&!cbHyp.isSelected()){
//求cos(三角余弦函数)
//定义域为:(-∞,+∞);
DecimalFormat df=new DecimalFormat();
df.setMaximumFractionDigits(15);
df.setDecimalSeparatorAlwaysShown(true);
if(rbAngle.isSelected()){
num=ScienceArith.deg_to_rad(num);
displayField.setText(Math.cos(num)+"");
}else if(rbGrads.isSelected()){
num=ScienceArith.grad_to_rad(num);
displayField.setText(Math.cos(num)+"");
}else{
displayField.setText(df.format(Math.cos(num)));
}
}
isOperandBegin=true;
isDot=false;
}
});
//创建Tan按钮
btnTan=new JButton("tan");
btnTan.setForeground(Color.MAGENTA);
btnTan.setMargin(new Insets(0,1,2,1));
container.add(btnTan);
btnTan.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
if(isError==true){
return;
}
double num=Double.parseDouble(displayField.getText().replace(",",""));//弧度表示
if(cbInv.isSelected()&&cbHyp.isSelected()){
//求atanh(反双曲正切函数)
//定义域:(-1,+1);
if(num>1||num<-1){
displayField.setText("函数输入无效。");
isError=true;
return;
}
if(num==1){
displayField.setText("除数不能为零。");
isError=true;
return;
}
displayField.setText(decimalismFormat.format(new BigDecimal(ScienceArith.atanh(num))));
cbHyp.setSelected(false);
cbInv.setSelected(false);
}
else if(!cbInv.isSelected()&&cbHyp.isSelected()){
//求tanh(双曲正切函数)
//定义域为:(-∞,+∞);
displayField.setText(decimalismFormat.format(new BigDecimal(Math.tanh(num))));
cbHyp.setSelected(false);
}
else if(cbInv.isSelected()&&!cbHyp.isSelected()){
//求atan(反正切函数)
//定义域(-∞,+∞)
if(rbAngle.isSelected()){
num=Math.atan(num);
displayField.setText(ScienceArith.rad_to_deg(num)+"");
}else if(rbGrads.isSelected()){
num=Math.atan(num);
displayField.setText(ScienceArith.rad_to_grad(num)+"");
}else{
displayField.setText(Math.atan(num)+"");
}
cbInv.setSelected(false);
}
else if(!cbInv.isSelected()&&!cbHyp.isSelected()){
//直接求tan(三角函数)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -