[java]代码库
//创建页面Calframe.class
package calframe;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Arrays;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CalFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* design for the face of cal
*/
private final static int PRE_WIDTH=500;
private final static int PRE_HEIGHT=400;
private JTextField text=null;
private JButton button=null; //storage mark
private String[] nOp={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
private String[] mOp={"MC","MR","MS","M+"};
private String[] rOp={"Back","CE","C"};
private CalService service= new CalService();
public CalFrame(){
this.setTitle("Calculation");
this.setSize(PRE_WIDTH,PRE_HEIGHT);
this.setLocationRelativeTo(null);
this.setResizable(false);
// add bottom
JPanel panel=new JPanel();
panel.setLayout(new BorderLayout(10,1));
panel.add(getTextField(), BorderLayout.NORTH);
panel.setPreferredSize(new Dimension(PRE_WIDTH,PRE_HEIGHT));
//WEST
JButton[] mBtn=getMButton();
JPanel panel1=new JPanel();
panel1.setLayout(new GridLayout(5,1,0,5));
for(JButton b:mBtn){
panel1.add(b);
}
panel.add(panel1, BorderLayout.WEST);
//
JButton[] rBtn=getRButton();
JPanel panel2=new JPanel();
panel2.setLayout(new BorderLayout(1,5));
JPanel panel21=new JPanel();
panel21.setLayout(new GridLayout(1,3,3,3));
for(JButton b:rBtn){
panel21.add(b);
}
panel2.add(panel21, BorderLayout.NORTH);
JButton[] nBtn=getNButton();
JPanel panel22=new JPanel();
panel22.setLayout(new GridLayout(4,5,3,5));
for(JButton b:nBtn){
panel22.add(b);
}
panel2.add(panel22,BorderLayout.CENTER);
panel.add(panel2, BorderLayout.CENTER);
this.add(panel);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
private JButton[] getRButton() {
// TODO Auto-generated method stub
JButton[] rBtn=new JButton[rOp.length];
for(int i=0;i<this.rOp.length;i++){
JButton b=new JButton(this.rOp[i]);
b.addActionListener(getActionListener());
b.setForeground(Color.red);
rBtn[i]=b;
}
return rBtn;
}
//return data Btn
private JButton[] getNButton() {
// TODO Auto-generated method stub
String[] redBtn={"/","*","-","+","="};
JButton[] nbutton=new JButton[nOp.length];
for(int i=0;i<this.nOp.length;i++){
JButton b = new JButton(this.nOp[i]);
b.addActionListener(getActionListener());
Arrays.sort(redBtn);
if(Arrays.binarySearch(redBtn, nOp[i])>=0){
b.setForeground(Color.red);
}else{
b.setForeground(Color.blue);
}
nbutton[i]=b;
}
return nbutton;
}
private ActionListener getActionListener() {
// TODO Auto-generated method stub
ActionListener actionListener = new ActionListener(){
public void actionPerformed(ActionEvent e){
String cmd=e.getActionCommand();
String result=null;
try{
result=service.callMethod(cmd,text.getText());
}catch(Exception e2){
System.out.println(e2.getMessage());
}
if(cmd.indexOf("MC")==0){
button.setText("");
}else if(cmd.indexOf("M")==0){
button.setText("M");
}
//show the calculate result
if(result!=null){
text.setText(result);
}
}
};
return actionListener;
}
private JButton[] getMButton() {
// TODO Auto-generated method stub
JButton[] mBtn=new JButton[mOp.length+1];
mBtn[0]=getButton();
for(int i=0;i<this.mOp.length;i++){
JButton b=new JButton(this.mOp[i]);
b.addActionListener(getActionListener());
b.setForeground(Color.red);
mBtn[i+1] = b;
}
return mBtn;
}
private JButton getButton() {
// TODO Auto-generated method stub
button=new JButton();
return button;
}
//return show
private JTextField getTextField() {
// TODO Auto-generated method stub
text = new JTextField("0",10);
return text;
}
public static void main(String[] args){
new CalFrame();
}
}
public class CalService {
private boolean isSecondNum=false;
private String lastOp;
private String firstNum="0";
private String secondNum="null";
private double store;
private String numString = "0123456789.";
private String opString="+-*/";
public String catNum(String cmd,String text){
String result = cmd;
if(!"0".equals(text)){
if(isSecondNum){
isSecondNum=false;
}else{
result = text + cmd;
}
}
if(result.indexOf(".")==0){
result = "0" + result;
}
return result;
}
public String setOp(String cmd,String text){
this.lastOp = cmd;
this.firstNum=text;
this.secondNum=null;
this.isSecondNum=true;
return null;
}
public String cal(String text,boolean isPercent){
double secondResult = secondNum==null?Double.valueOf(text).doubleValue():Double.valueOf(secondNum).doubleValue();
// chushu is zero
if(secondResult == 0 && this.lastOp.equals("/")){
return "0";
}
//hava "%"
if(isPercent){
secondResult = MyMath.multiply(Double.valueOf(firstNum),(double) MyMath.divide(secondResult,100.000));
}
if(this.lastOp.equals("+")){
firstNum=String.valueOf(MyMath.add(Double.valueOf(firstNum),secondResult));
}else if(this.lastOp.equals("-")){
firstNum=String.valueOf(MyMath.subtract(Double.valueOf(firstNum),secondResult));
}else if(this.lastOp.equals("*")){
firstNum=String.valueOf(MyMath.multiply(Double.valueOf(firstNum),secondResult));
}else if(this.lastOp.equals("/")){
firstNum=String.valueOf(MyMath.divide(Double.valueOf(firstNum),secondResult));
}
secondNum=secondNum==null?text:secondNum;
this.isSecondNum=true;
return firstNum;
}
// sqrt
public String sqrt(String text){
this.isSecondNum = true;
return String.valueOf(Math.sqrt(Double.valueOf(text)));
}
// qiu daoshu
public String setReciprocal(String text){
if(text.equals("0")){
return text;
}else {
this.isSecondNum = true;
return String.valueOf(MyMath.divide(1, Double.valueOf(text)));
}
}
//storage
public String mCmd(String cmd,String text){
if(cmd.equals("M+")){
store=MyMath.add(store, Double.valueOf(text));
}else if(cmd.equals("MC")){
store=0;
}else if(cmd.equals("MR")){
isSecondNum=true;
return String.valueOf(store);
}else if(cmd.equals("MS")){
store = Double.valueOf(text).doubleValue();
}
return null;
}
public String setNegative(String text){
if(text.indexOf("-")==0){
return text.substring(1, text.length());
}else {
return "-" + text;
}
}
public String clear(String text){
return "0";
}
public String clearAll(){
this.firstNum="0";
this.secondNum=null;
return this.firstNum;
}
public String backSpace(String text){
return text.equals("0") || text.equals("")?"0":text.substring(0,text.length()-1);
}
public String callMethod(String cmd, String text) {
// TODO Auto-generated method stub
if(cmd.equals("C")){
return clearAll();
}else if(cmd.equals("CE")){
return clear(text);
}else if(cmd.equals("Back")){
return backSpace(text);
}else if(numString.indexOf(cmd) != -1){
return catNum(cmd,text);
}else if(opString.indexOf(cmd) != -1){
return setOp(cmd,text);
}else if(cmd.equals("+/-")){
return setNegative(text);
}else if(cmd.equals("1/x")){
return setReciprocal(text);
}else if(cmd.equals("sqrt")){
return sqrt(text);
}else if(cmd.equals("%")){
return cal(text,true);
}else if(cmd.equals("=")){
return cal(text,false);
}else{
return mCmd(cmd,text);
}
}
}
// 计算
import java.math.BigDecimal;
public class MyMath {
/**
* Double for BigDecimal
* @param secondResult
* @param double1
* @return
*/
private static BigDecimal getBigDecimal(final double number){
return new BigDecimal(number);
}
public static Object divide(double num1, double num2) {
// TODO Auto-generated method stub
BigDecimal first=getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.divide(second, 3, BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double multiply(double num1, double num2) {
// TODO Auto-generated method stub
BigDecimal first=getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.multiply(second).doubleValue();
}
public static double add(double num1, double num2) {
// TODO Auto-generated method stub
BigDecimal first=getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.add(second).doubleValue();
}
public static double subtract(double num1, double num2) {
// TODO Auto-generated method stub
BigDecimal first=getBigDecimal(num1);
BigDecimal second = getBigDecimal(num2);
return first.subtract(second).doubleValue();
}
}
中级程序员
by: 我是路人 发表于:2017-05-31 10:59:57 顶(0) | 踩(0) 回复
是科学计算器吗
回复评论