swing计算器

来源:互联网 发布:四知文言文的意思 编辑:程序博客网 时间:2024/05/13 06:30
//MyCalculator.javapackage test3;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.KeyEventPostProcessor;import java.awt.KeyboardFocusManager;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.math.BigDecimal;import java.math.BigInteger;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.SwingConstants;import javax.swing.border.EmptyBorder;public class MyCalculator extends JFrame {JPanel mainPanel=new JPanel();private JTextField textFiled;private String a;private char c='#';private JButton numButton[]=new JButton[10];public final static String About="Version : 1.0.0\n"                       +"Arthur  : kkke\n"                       +"csdnBlog: http://blog.csdn.net/tookkke/article/\n";private void initText() {textFiled.setText("0");}private void initFrame() {setSize(400, 250);setLocationRelativeTo(null);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getContentPane().add(mainPanel,BorderLayout.CENTER);mainPanel.setBorder(new EmptyBorder(5, 5, 5, 5));mainPanel.setLayout(new BorderLayout(0, 5));}private class MyActionListener implements ActionListener {private String num;public MyActionListener(int num) {this.num=Integer.toString(num);}@Overridepublic void actionPerformed(ActionEvent e) {if(textFiled.getText().equals("0"))textFiled.setText(num);else textFiled.setText(textFiled.getText()+num);}}public MyCalculator() {super("Calculator");initFrame();JPanel panel = new JPanel();mainPanel.add(panel, BorderLayout.NORTH);panel.setLayout(new BorderLayout(0, 0));textFiled = new JTextField();textFiled.setHorizontalAlignment(SwingConstants.RIGHT);textFiled.setEditable(false);textFiled.setPreferredSize(new Dimension(0, 25));panel.add(textFiled, BorderLayout.NORTH);JPanel PCenter = new JPanel();mainPanel.add(PCenter, BorderLayout.CENTER);PCenter.setLayout(new BorderLayout(3, 3));JPanel PNorth = new JPanel();PCenter.add(PNorth, BorderLayout.NORTH);PNorth.setLayout(new GridLayout(1, 4, 2, 0));JButton btnBack = new JButton("Back");btnBack.setForeground(Color.blue);btnBack.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String text=textFiled.getText();if(text.equals("0")){if(c!='#'){c='#';textFiled.setText(a);}}else{if(text.length()==1)textFiled.setText("0");else{textFiled.setText(text.substring(0,text.length()-1));if(textFiled.getText().equals("-"))textFiled.setText("0");}}}});PNorth.add(btnBack);JButton btnCE = new JButton("CE");btnCE.setForeground(Color.blue);btnCE.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {c='#';textFiled.setText("0");}});PNorth.add(btnCE);    JButton btnC = new JButton("C");    btnC.setForeground(Color.blue);    btnC.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {textFiled.setText("0");}});PNorth.add(btnC);JButton btnAbout = new JButton("About");btnAbout.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {JOptionPane.showMessageDialog(MyCalculator.this, About, "About", JOptionPane.INFORMATION_MESSAGE);}});btnAbout.setForeground(Color.blue);JPanel PWest = new JPanel();PWest.setLayout(new GridLayout(4, 3, 2, 2));PNorth.add(btnAbout);for(int i=9;i>=0;i--){numButton[i]=new JButton(Integer.toString(i));numButton[i].addActionListener(new MyActionListener(i));PWest.add(numButton[i]);}JPanel PEX = new JPanel();PEX.setLayout(new GridLayout(1, 2, 8, 0));PCenter.add(PEX, BorderLayout.CENTER);JButton btnPositive = new JButton("+/-");btnPositive.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String text=textFiled.getText();if(!text.equals("0")){if(text.charAt(0)=='-')textFiled.setText(text.substring(1));else textFiled.setText("-"+text);}}});PWest.add(btnPositive);JButton btnDot = new JButton(".");PWest.add(btnDot);btnDot.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if(!textFiled.getText().contains("."))textFiled.setText(textFiled.getText()+".");}});PEX.add(PWest, BorderLayout.WEST);JPanel PEast = new JPanel();PEast.setLayout(new GridLayout(4, 2, 2, 2));JButton btnDevide = new JButton("/");btnDevide.setForeground(Color.red);btnDevide.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {a=textFiled.getText();c='/';textFiled.setText("0");}});PEast.add(btnDevide);JButton btnSqrt = new JButton("sqrt");btnSqrt.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {textFiled.setText(BigDecimal.valueOf(Math.sqrt(Double.parseDouble(textFiled.getText()))).stripTrailingZeros().toPlainString());}});PEast.add(btnSqrt);JButton btnMultiply = new JButton("*");btnMultiply.setForeground(Color.red);btnMultiply.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {a=textFiled.getText();c='*';textFiled.setText("0");}});PEast.add(btnMultiply);JButton btnMod = new JButton("%");PEast.add(btnMod);btnMod.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {a=textFiled.getText();c='%';textFiled.setText("0");}});JButton btnSubtract = new JButton("-");btnSubtract.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {a=textFiled.getText();c='-';textFiled.setText("0");}});btnSubtract.setForeground(Color.red);PEast.add(btnSubtract);JButton btnReverse = new JButton("1/x");btnReverse.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try{textFiled.setText(new BigDecimal("1").divide(new BigDecimal(textFiled.getText())).stripTrailingZeros().toPlainString());}catch(ArithmeticException e1) {textFiled.setText(new BigDecimal("1").divide(new BigDecimal(textFiled.getText()),15,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());}}});PEast.add(btnReverse);JButton btnAdd = new JButton("+");btnAdd.setForeground(Color.red);btnAdd.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {a=textFiled.getText();c='+';textFiled.setText("0");}});PEast.add(btnAdd);JButton btnEnter = new JButton("=");btnEnter.setForeground(Color.red);btnEnter.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {switch(c){case '+':textFiled.setText(new BigDecimal(a).add(new BigDecimal(textFiled.getText())).stripTrailingZeros().toPlainString());break;case '-':textFiled.setText(new BigDecimal(a).subtract(new BigDecimal(textFiled.getText())).stripTrailingZeros().toPlainString());break;case '*':textFiled.setText(new BigDecimal(a).multiply(new BigDecimal(textFiled.getText())).stripTrailingZeros().toPlainString());break;case '/':try{textFiled.setText(new BigDecimal(a).divide(new BigDecimal(textFiled.getText())).stripTrailingZeros().toPlainString());}catch(ArithmeticException e1) {try{    textFiled.setText(new BigDecimal(a).divide(new BigDecimal(textFiled.getText()),15,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString());}catch(ArithmeticException e2) {JOptionPane.showMessageDialog(null, "除数不能为0");}}break;case '%':a=a.split("[.]")[0];String b=textFiled.getText().split("[.]")[0];try{    textFiled.setText(new BigInteger(a).mod(new BigInteger(b)).toString());}catch(ArithmeticException e2) {JOptionPane.showMessageDialog(null, "除数不能为0");}break;}c='#';}});PEast.add(btnEnter);PEX.add(PEast, BorderLayout.EAST);KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventPostProcessor(new KeyEventPostProcessor() {private long lastPress=0;@Overridepublic boolean postProcessKeyEvent(KeyEvent e) {if(e.getID()==KeyEvent.KEY_PRESSED){long time=System.currentTimeMillis();if(time-lastPress>68){lastPress=time;if(Character.isDigit(e.getKeyChar())){numButton[e.getKeyChar()-'0'].doClick();}else if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE)btnBack.doClick();else switch(e.getKeyChar()){case '.':btnDot.doClick();break;case '+':btnAdd.doClick();break;case '-':btnSubtract.doClick();break;case '*':btnMultiply.doClick();break;case '/':btnDevide.doClick();break;case '%':btnMod.doClick();break;case '=':case '\n':    btnEnter.doClick();break;}}}return false;}});}public static void main(String[] args) {MyCalculator myCalculator=new MyCalculator();myCalculator.setVisible(true);myCalculator.requestFocus();myCalculator.initText();}}

0 0
原创粉丝点击