📄 calculator.java
字号:
package Calculator;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: </p> * @author not attributable * @version 1.0 */public class Calculator extends JFrame { JPanel contentPane; BorderLayout borderLayout1 = new BorderLayout();//实例化控件 private JTextField txtNumber = new JTextField(); private JTextField txt = new JTextField(); private JButton jb0 = new JButton("0"); private JButton jb1 = new JButton("1"); private JButton jb2 = new JButton("2"); private JButton jb3 = new JButton("3"); private JButton jb4 = new JButton("4"); private JButton jb5 = new JButton("5"); private JButton jb6 = new JButton("6"); private JButton jb7 = new JButton("7"); private JButton jb8 = new JButton("8"); private JButton jb9 = new JButton("9"); private JButton jbsum = new JButton("+"); private JButton jbdec = new JButton("-"); private JButton jbride = new JButton("*"); private JButton jbrem = new JButton("/"); private JButton jbsqrt = new JButton("sqrt"); private JButton jbfshu = new JButton("1/x"); private JButton jbbfen = new JButton("%"); private JButton jbamount = new JButton("="); private JButton jbZorF = new JButton("+/-"); private JButton jbdian = new JButton("."); private JButton jbmc = new JButton("MC"); private JButton jbmr = new JButton("MR"); private JButton jbms = new JButton("MS"); private JButton jbmjia = new JButton("M+"); private JButton jbbackspace = new JButton("Backspace"); private JButton jbce = new JButton("CE"); private JButton jbc = new JButton("C"); private double tmp; private int op; private boolean bool; //Construct the frame public Calculator() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } //Component initialization private void jbInit() throws Exception { contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(borderLayout1); this.setSize(new Dimension(400, 300)); this.setTitle("计算器"); txtNumber.setHorizontalAlignment(txtNumber.RIGHT); txt.setBackground(Color.lightGray); txt.disable(); //设置数据面板 JPanel pNumber = new JPanel(new GridLayout(4,5)); pNumber.add(jb7); pNumber.add(jb8); pNumber.add(jb9); pNumber.add(jbrem); pNumber.add(jbsqrt); pNumber.add(jb4); pNumber.add(jb5); pNumber.add(jb6); pNumber.add(jbride); pNumber.add(jbbfen, null); pNumber.add(jb1); pNumber.add(jb2); pNumber.add(jb3); pNumber.add(jbdec); pNumber.add(jbfshu); pNumber.add(jbZorF); pNumber.add(jb0); pNumber.add(jbdian); pNumber.add(jbsum); pNumber.add(jbamount); pNumber.setBorder(new EtchedBorder()); // pNumber.setBorder(new LineBorder(Color.BLUE)); //设置清除面板 JPanel pClear = new JPanel(new GridLayout(1,4)); pClear.add(txt); pClear.add(jbbackspace); pClear.add(jbce); pClear.add(jbc); pClear.setBorder(new LineBorder(Color.BLUE)); //设置存储面板 JPanel pMemory = new JPanel(new GridLayout(4,1)); pMemory.add(jbmc); pMemory.add(jbmr); pMemory.add(jbms); pMemory.add(jbmjia); pMemory.setBorder(new LineBorder(Color.BLUE)); //设置综合面板 JPanel p = new JPanel(new BorderLayout()); p.add(pClear,BorderLayout.NORTH); p.add(pMemory,BorderLayout.WEST); p.add(pNumber,BorderLayout.CENTER); p.setBorder(new EtchedBorder()); JPanel ptxt = new JPanel(new BorderLayout()); ptxt.add(txtNumber,BorderLayout.CENTER); ptxt.setBorder(new LineBorder(Color.BLUE)); Container c = this.getContentPane(); c.setLayout(new BorderLayout()); c.add(ptxt,BorderLayout.NORTH); c.add(p,BorderLayout.CENTER); //设置窗体 int width=350,height=250; this.setSize(width,height); Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation((d.width-width)/2,(d.height-height)/2); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //为按纽事件添加监听 //数字按纽,使用内部类 NumberListener; jb0.addActionListener(new NumberListener()); jb1.addActionListener(new NumberListener()); jb2.addActionListener(new NumberListener()); jb3.addActionListener(new NumberListener()); jb4.addActionListener(new NumberListener()); jb5.addActionListener(new NumberListener()); jb6.addActionListener(new NumberListener()); jb7.addActionListener(new NumberListener()); jb8.addActionListener(new NumberListener()); jb9.addActionListener(new NumberListener()); //运算按纽,使用内部类 OperationListener; jbsum.addActionListener(new OperationListener()); jbdec.addActionListener(new OperationListener()); jbride.addActionListener(new OperationListener()); jbrem.addActionListener(new OperationListener()); jbamount.addActionListener(new OperationListener()); jbsqrt.addActionListener(new OperationListener()); jbfshu.addActionListener(new OperationListener()); //正负号按纽 jbZorF.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(txtNumber.getText().indexOf("-") == -1){ txtNumber.setText("-" + txtNumber.getText()); }else{ int i = txtNumber.getText().length(); txtNumber.setText(txtNumber.getText().substring(1,i)); } } }); //小数点按纽 jbdian.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(bool){ txtNumber.setText("0."); bool = false; } if(txtNumber.getText().indexOf(".") == -1){ txtNumber.setText(txtNumber.getText() + "."); } } }); // //清除按纽 jbc.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ txtNumber.setText(""); tmp = 0; op = 0; bool = false; } }); jbce.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ txtNumber.setText(""); } }); jbbackspace.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ int i = txtNumber.getText().length(); txtNumber.setText(txtNumber.getText().substring(0,i-1)); } }); //存储按纽 } //内部类,NumberListener 为数字监听类,用于数字按纽的监听 private class NumberListener implements ActionListener{ public void actionPerformed(ActionEvent e){ if(bool){ txtNumber.setText(""); bool=false; } txtNumber.setText(txtNumber.getText() + e.getActionCommand()); } } //内部类,OperationListener 为运算按纽监听类,用于对四则运算按纽的监听 private class OperationListener implements ActionListener{ double res; void result(){ double tmpend = Double.parseDouble(txtNumber.getText()); switch (op){ case 1: res = tmp + tmpend; break; case 2: res = tmp - tmpend; break; case 3: res = tmp * tmpend; break; case 4: try{ res = tmp / tmpend; }catch(Exception ex){ txtNumber.setText("除数不能为零"); } break; } txtNumber.setText(new Double(res).toString()); tmp = 0; op = 0; } public void actionPerformed(ActionEvent e){ String str=e.getActionCommand(); char s=str.charAt(0); if (op!=0){ result(); } bool=true; switch (s){ case '+': tmp = Double.parseDouble(txtNumber.getText()); op = 1; break; case '-': tmp = Double.parseDouble(txtNumber.getText()); op = 2; break; case '*': tmp = Double.parseDouble(txtNumber.getText()); op = 3; break; case '/': tmp = Double.parseDouble(txtNumber.getText()); op=4; break; case '=': result(); break; } if ("sqrt" == str){ res = Math.sqrt(Double.parseDouble(txtNumber.getText())); txtNumber.setText(new Double(res).toString()); } if ("1/x" == str){ tmp = Double.parseDouble(txtNumber.getText()); if (tmp != 0){ res = 1 / tmp; txtNumber.setText(new Double(res).toString()); }else{ txtNumber.setText("除数不能为零"); } } } } //Overridden so we can exit when window is closed protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public static void main(String[] args){ new Calculator(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -