package com.Menu; import java.awt.EventQueue; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.SwingConstants; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.Font; import java.util.Stack; import javax.swing.JMenu; import javax.swing.JMenuItem; import com.service.CalculatorImpl; import javax.swing.UIManager; import javax.swing.JMenuBar; import java.awt.SystemColor; import java.awt.Color; import java.awt.Toolkit; import javax.swing.JLabel; import javax.swing.ImageIcon; /** * 有JFrame工具创建的swing界面 * * */ public class Main { private JFrame frame; private JTextField display; private JPanel panel; private JButton clear; private JButton divide; private JButton multiple; private JButton delete; private JButton btnMc; private JButton num7; private JButton num8; private JButton num9; private JButton reduce; private JButton btnM; private JButton num1; private JButton num2; private JButton num3; private JButton equal; private JButton point; private JButton num0; private JButton num4; private JButton num5; private JButton num6; private JButton add; private JButton btnM_2; private JButton btnMr; private JMenuBar menuBar; private JMenu mnNewMenu; private JMenuItem mntmNewMenuItem; private JMenu mnNewMenu_1; private JMenuItem menuItem; private JMenuItem menuItem_1; private JTextField operate; private boolean flag = false; /** * Launch the application. * * */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Main window = new Main(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public Main() { initialize(); } /** * 初始化框架及组件,并添加监听事件 */ private void initialize() { frame = new JFrame(); frame.setIconImage(Toolkit.getDefaultToolkit().getImage("E:\\myeclipse\\workspace\\mychat\\calculator\\img\\ms.ico")); frame.getContentPane().setBackground(UIManager.getColor("Button.darkShadow")); frame.setTitle("\u8BA1\u7B97\u5668"); frame.setBounds(100, 100, 794, 1000); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); display = new JTextField(); display.setText("0"); display.setAlignmentX(800); display.setFont(new Font("宋体", Font.PLAIN, 24)); display.setEditable(false); display.setBounds(15, 94, 748, 91); frame.getContentPane().add(display); display.setColumns(2); panel = new JPanel(); panel.setBounds(15, 222, 748, 604); frame.getContentPane().add(panel); panel.setLayout(null); clear = new JButton("C"); clear.setFont(new Font("宋体", Font.PLAIN, 24)); clear.setBackground(SystemColor.activeCaptionBorder); clear.setForeground(SystemColor.window); clear.setBounds(15, 15, 237, 100); panel.add(clear); divide = new JButton("/"); divide.setFont(new Font("宋体", Font.PLAIN, 24)); divide.setForeground(SystemColor.window); divide.setBackground(SystemColor.activeCaptionBorder); divide.setBounds(456, 265, 100, 100); panel.add(divide); multiple = new JButton("X"); multiple.setFont(new Font("宋体", Font.PLAIN, 24)); multiple.setForeground(SystemColor.window); multiple.setBackground(SystemColor.activeCaptionBorder); multiple.setBounds(456, 495, 100, 100); panel.add(multiple); delete = new JButton("\u5220\u9664"); delete.setFont(new Font("宋体", Font.PLAIN, 24)); delete.setForeground(SystemColor.window); delete.setBackground(SystemColor.activeCaptionBorder); delete.setBounds(604, 15, 100, 100); panel.add(delete); btnMc = new JButton("MC"); btnMc.setFont(new Font("宋体", Font.PLAIN, 24)); btnMc.setBackground(SystemColor.activeCaptionBorder); btnMc.setForeground(SystemColor.window); btnMc.setBounds(604, 145, 100, 100); panel.add(btnMc); num7 = new JButton("7"); num7.setFont(new Font("宋体", Font.PLAIN, 24)); num7.setForeground(SystemColor.window); num7.setBackground(SystemColor.activeCaptionBorder); num7.setBounds(15, 145, 100, 100); panel.add(num7); num8 = new JButton("8"); num8.setFont(new Font("宋体", Font.PLAIN, 24)); num8.setForeground(SystemColor.window); num8.setBackground(SystemColor.activeCaptionBorder); num8.setBounds(152, 145, 100, 100); panel.add(num8); num9 = new JButton("9"); num9.setFont(new Font("宋体", Font.PLAIN, 24)); num9.setForeground(SystemColor.window); num9.setBackground(SystemColor.activeCaptionBorder); num9.setBounds(302, 145, 100, 100); panel.add(num9); reduce = new JButton("-"); reduce.setFont(new Font("宋体", Font.PLAIN, 24)); reduce.setForeground(SystemColor.window); reduce.setBackground(SystemColor.activeCaptionBorder); reduce.setBounds(456, 145, 100, 100); panel.add(reduce); btnM = new JButton("M+"); btnM.setFont(new Font("宋体", Font.PLAIN, 24)); btnM.setBackground(SystemColor.activeCaptionBorder); btnM.setForeground(SystemColor.window); btnM.setBounds(604, 265, 100, 100); panel.add(btnM); num1 = new JButton("1"); num1.setFont(new Font("宋体", Font.PLAIN, 24)); num1.setBackground(SystemColor.activeCaptionBorder); num1.setForeground(SystemColor.window); num1.setBounds(15, 380, 100, 100); panel.add(num1); num2 = new JButton("2"); num2.setFont(new Font("宋体", Font.PLAIN, 24)); num2.setForeground(SystemColor.window); num2.setBackground(SystemColor.activeCaptionBorder); num2.setBounds(152, 380, 100, 100); panel.add(num2); num3 = new JButton("3"); num3.setFont(new Font("宋体", Font.PLAIN, 24)); num3.setBackground(SystemColor.activeCaptionBorder); num3.setForeground(SystemColor.window); num3.setBounds(302, 380, 100, 100); panel.add(num3); equal = new JButton("="); equal.setFont(new Font("宋体", Font.PLAIN, 24)); equal.setForeground(SystemColor.window); equal.setBackground(SystemColor.activeCaptionBorder); equal.setBounds(604, 380, 100, 215); panel.add(equal); point = new JButton("."); point.setFont(new Font("宋体", Font.PLAIN, 24)); point.setBackground(SystemColor.activeCaptionBorder); point.setForeground(SystemColor.window); point.setBounds(302, 495, 100, 100); panel.add(point); num0 = new JButton("0"); num0.setFont(new Font("宋体", Font.PLAIN, 24)); num0.setForeground(SystemColor.window); num0.setBackground(SystemColor.activeCaptionBorder); num0.setBounds(15, 495, 238, 100); panel.add(num0); num4 = new JButton("4"); num4.setFont(new Font("宋体", Font.PLAIN, 24)); num4.setForeground(SystemColor.window); num4.setBackground(SystemColor.activeCaptionBorder); num4.setBounds(15, 265, 100, 100); panel.add(num4); num5 = new JButton("5"); num5.setFont(new Font("宋体", Font.PLAIN, 24)); num5.setForeground(SystemColor.window); num5.setBackground(SystemColor.activeCaptionBorder); num5.setBounds(152, 265, 100, 100); panel.add(num5); num6 = new JButton("6"); num6.setFont(new Font("宋体", Font.PLAIN, 24)); num6.setForeground(SystemColor.window); num6.setBackground(SystemColor.activeCaptionBorder); num6.setBounds(302, 265, 100, 100); panel.add(num6); add = new JButton("+"); add.setFont(new Font("宋体", Font.PLAIN, 24)); add.setForeground(SystemColor.window); add.setBackground(SystemColor.activeCaptionBorder); add.setBounds(456, 380, 100, 100); panel.add(add); btnM_2 = new JButton("M-"); btnM_2.setFont(new Font("宋体", Font.PLAIN, 24)); btnM_2.setForeground(SystemColor.window); btnM_2.setBackground(SystemColor.activeCaptionBorder); btnM_2.setBounds(456, 19, 100, 93); panel.add(btnM_2); btnMr = new JButton("MR"); btnMr.setFont(new Font("宋体", Font.PLAIN, 24)); btnMr.setForeground(SystemColor.window); btnMr.setBackground(SystemColor.activeCaptionBorder); btnMr.setBounds(302, 15, 100, 100); panel.add(btnMr); //添加监听器 btnMr.addActionListener(new ForFun()); btnM_2.addActionListener(new ForFun()); btnMc.addActionListener(new ForFun()); btnM.addActionListener(new ForFun()); clear.addActionListener(new ClearListener()); num0.addActionListener(new ButtonListener(display,num0)); num1.addActionListener(new ButtonListener(display,num1)); num2.addActionListener(new ButtonListener(display,num2)); num3.addActionListener(new ButtonListener(display,num3)); num4.addActionListener(new ButtonListener(display,num4)); num5.addActionListener(new ButtonListener(display,num5)); num6.addActionListener(new ButtonListener(display,num6)); num7.addActionListener(new ButtonListener(display,num7)); num8.addActionListener(new ButtonListener(display,num8)); num9.addActionListener(new ButtonListener(display,num9)); add.addActionListener(new CalculatorListener(display,add)); reduce.addActionListener(new CalculatorListener(display,reduce)); multiple.addActionListener(new CalculatorListener(display,multiple)); divide.addActionListener(new CalculatorListener(display,divide)); point.addActionListener(new CalculatorListener(display,point)); delete.addActionListener(new DeleteListener()); equal.addActionListener(new ArithmeticListener()); //设置右对齐 display.setHorizontalAlignment(SwingConstants.RIGHT); operate = new JTextField(); operate.setForeground(Color.BLACK); operate.setHorizontalAlignment(SwingConstants.RIGHT); operate.setFont(new Font("宋体", Font.PLAIN, 24)); operate.setEditable(false); operate.setBounds(15, 27, 748, 68); frame.getContentPane().add(operate); operate.setColumns(10); JLabel label = new JLabel(""); label.setHorizontalAlignment(SwingConstants.CENTER); label.setIcon(new ImageIcon("E:\\myeclipse\\workspace\\mychat\\calculator\\img\\wait.gif")); label.setBounds(232, 831, 322, 83); frame.getContentPane().add(label); frame.setLocationRelativeTo(null); frame.setResizable(false);//不允许用户改变界面大小 menuBar = new JMenuBar(); frame.setJMenuBar(menuBar); mnNewMenu = new JMenu("\u9009\u62E9"); menuBar.add(mnNewMenu); mntmNewMenuItem = new JMenuItem("\u79D1\u5B66\u8BA1\u7B97\u5668"); mntmNewMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.dispose(); frame.setVisible(false); JOptionPane.showMessageDialog(null, "待跟进"); } }); mnNewMenu.add(mntmNewMenuItem); menuItem_1 = new JMenuItem("\u5173\u95ED"); menuItem_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); mnNewMenu.add(menuItem_1); mnNewMenu_1 = new JMenu("\u5173\u4E8E"); menuBar.add(mnNewMenu_1); menuItem = new JMenuItem("\u5E2E\u52A9"); menuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "涂伟俊,17年,深圳,忘记了"); } }); mnNewMenu_1.add(menuItem); } /*调戏罢了*/ private class ForFun implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { display.setText("哇,这个按键都被你发现了,厉害了!(╯▽╰)(╯▽╰)(╯▽╰)"); equal.setEnabled(false); clear.setBackground(Color.RED); } } /*监听运算符包括点*/ private class CalculatorListener implements ActionListener{ JTextField display; JButton str; CalculatorListener(JTextField display, JButton str){ this.display = display; this.str = str; } public void actionPerformed(ActionEvent e) { StringBuffer s = new StringBuffer(display.getText()); if(flag){ display.setText("0"); flag = false; } else if(!(s.length()==0)){ if(!((display.getText().endsWith("+"))||(display.getText().endsWith("-"))||(display.getText().endsWith("X"))||(display.getText().endsWith("/")))){ //当为无穷和非数字型,清空 if(display.getText().indexOf("Infinity")!=-1||display.getText().indexOf("NaN")!=-1){ display.setText("0"); //判断前面的数是不是小数,以决定要不要在它后面加小数点 }else if(str.getText() == "." && Character.isDigit(s.charAt(s.length()-1)) ){ int lastIndex = -1; Stack<String> stack = new Stack<String>(); for(int i = 0; i<s.length(); i++){ lastIndex = new CalculatorImpl().readDouble(display.getText(), i); stack.push(display.getText().substring(i,lastIndex)); i = lastIndex; } String last = stack.pop(); if(last.indexOf(".") == -1){ s.append(str.getText()); display.setText(s.toString()); } //普通情况 }else if(!display.getText().endsWith(".")){ s.append(str.getText()); display.setText(s.toString()); } //当前面是符号时,自动填零 }else if(str.getText()=="." &&(s.charAt(s.length()-1) =='+'|| s.charAt(s.length()-1) =='-'||s.charAt(s.length()-1) =='X'||s.charAt(s.length()-1) =='/') ){ s.append("0."); display.setText(s.toString()); } //为空时,按点填零 }else if(s.length() == 0 && str.getText() == "."){ s.append("0."); display.setText(s.toString()); } } } //监听按钮点击事件 private class ButtonListener implements ActionListener{ JTextField display; JButton str; ButtonListener(JTextField display, JButton str){ this.display = display; this.str = str; } public void actionPerformed(ActionEvent e) { System.out.println(display.getText()); StringBuffer s = new StringBuffer(display.getText()); if(flag ){ display.setText(str.getText()); System.out.println("!!"); flag = false; }else if(display.getText().indexOf("Infinity")!=-1||display.getText().indexOf("NaN")!=-1){ System.out.println("!1!"); }else if("0".equals(display.getText())){ display.setText(str.getText()); }else{ display.setText(s+str.getText()); } } } //监听清空事件 private class ClearListener implements ActionListener{ public void actionPerformed(ActionEvent e) { System.out.println(display.getText()); if(!"".equals(display.getText())) operate.setText(""); display.setText("0"); clear.setBackground(SystemColor.activeCaptionBorder); equal.setEnabled(true); } } //监听删除事件 private class DeleteListener implements ActionListener{ public void actionPerformed(ActionEvent e) { String s = display.getText(); if(s.length()==1){ display.setText("0"); }else if(!"".equals(s)&&!"0".equals(s)){ StringBuffer sb =new StringBuffer(display.getText()); sb.deleteCharAt(sb.length()-1); display.setText(sb.toString()); } } } /*计算的监听器*/ private class ArithmeticListener implements ActionListener{ public void actionPerformed(ActionEvent e) { if((display.getText().length()!=0)&&!((display.getText().endsWith("+"))||(display.getText().endsWith("-"))||(display.getText().endsWith("X"))||(display.getText().endsWith("/"))||(display.getText().endsWith(".")))){ flag = true; operate.setText(display.getText()); try{ double result = new CalculatorImpl().toReversePolishNotation(display.getText()); String restr = new Double(result).toString(); display.setText(restr); //使用转换获取js的eval方法计算,做不了太复杂的混合运算例如:8-6/3+6X3+2.056-96/6 // ScriptEngineManager manager = new ScriptEngineManager(); // ScriptEngine se = manager.getEngineByName("js"); // Object result = null; // try { // result = se.eval(display.getText()); // } catch (ScriptException e1) { // e1.printStackTrace(); // } // display.setText((String)result); } catch(NumberFormatException e1){ display.setText("错误"); } } } } public JFrame getJFrame(){ return this.frame; } }
最近下载更多
最近浏览更多
微信网友_7008818781589504 LV1
5月25日
xlqb999 LV3
4月29日
guyutian LV2
4月21日
芋妮奶茶 LV1
4月20日
1053001914 LV1
2023年12月27日
一起加油 LV5
2023年12月27日
clumsy191
2023年12月17日
暂无贡献等级
gk_xmj LV1
2023年12月6日
1112WHQ LV7
2023年11月3日
EFWAGGFAWGR
2023年10月19日
暂无贡献等级