diff --git a/GuiCalculator.java b/GuiCalculator.java index 13b41b30b97fe4fdcfe932978a609e914fb8969c..294dd93a9f6e7aadd66cd0a181473d64077c4449 100644 --- a/GuiCalculator.java +++ b/GuiCalculator.java @@ -16,149 +16,169 @@ import javax.swing.JTextField; public class GuiCalculator { - public static void main(String[] args) { - CalculatorUI ui=new CalculatorUI("VSCode GitPlugin GuiCalculator"); - ui.setVisible(true); - ui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - } + public static void main(String[] args) { + CalculatorUI ui = new CalculatorUI("VSCode GitPlugin GuiCalculator"); + ui.setVisible(true); + ui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +} + +class CalculatorUI extends JFrame { + + private JTextField textField = new JTextField("0"); + + private JPanel panel = new JPanel(new GridLayout(5, 4)); + private JButton bt11 = new JButton("7"); + private JButton bt12 = new JButton("8"); + private JButton bt13 = new JButton("9"); + private JButton bt14 = new JButton("/"); + private JButton bt21 = new JButton("4"); + private JButton bt22 = new JButton("5"); + private JButton bt23 = new JButton("6"); + private JButton bt24 = new JButton("*"); + private JButton bt31 = new JButton("1"); + private JButton bt32 = new JButton("2"); + private JButton bt33 = new JButton("3"); + private JButton bt34 = new JButton("-"); + private JButton bt41 = new JButton("0"); + private JButton bt42 = new JButton("."); + private JButton bt43 = new JButton("="); + private JButton bt44 = new JButton("+"); + private JButton bt51 = new JButton("%"); + private JButton bt52 = new JButton("!"); + private JButton bt53 = new JButton("~"); + private JButton bt54 = new JButton("^"); + JButton jb[] = { + bt11, + bt12, + bt13, + bt14, + bt21, + bt22, + bt23, + bt24, + bt31, + bt32, + bt33, + bt34, + bt41, + bt42, + bt43, + bt44, + bt51, + bt52, + bt53, + bt54, + }; + + class MyHandler implements ActionListener { + + String str = ""; + + @Override + public void actionPerformed(ActionEvent e) { + JButton source = (JButton) e.getSource(); + + if (source == bt43) { + str = str + "= " + CalcString.getRes(str); + textField.setText(str); + int res = JOptionPane.showConfirmDialog( + panel, + "Calculated, Goon ?", + "", + JOptionPane.YES_NO_OPTION + ); + if (res == JOptionPane.YES_OPTION) { + str = ""; + textField.setText("0"); + } else System.exit(0); + } else { + str = str + source.getText(); + textField.setText(str); + } + } + } + + public CalculatorUI(String title) { + super(title); + this.ComponentInit(); + MyHandler myHandler = new MyHandler(); + this.ListenerAdd(myHandler); + this.setLocation(300, 200); + this.setSize(600, 450); + } + + private void ComponentInit() { + this.add(textField, BorderLayout.NORTH); + textField.setPreferredSize(new Dimension(300, 80)); + textField.setHorizontalAlignment(JTextField.RIGHT); + textField.setFont(new Font("楷体", Font.PLAIN, 32)); + textField.setEditable(false); + + this.add(panel, BorderLayout.CENTER); + panel.setPreferredSize(new Dimension(300, 350)); + for (int i = 0; i < 20; i++) { + jb[i].setFont(new Font("楷体", Font.BOLD, 32)); + panel.add(jb[i]); + } + } + + private void ListenerAdd(MyHandler myHandler) { + for (int i = 0; i < 20; i++) { + jb[i].addActionListener(myHandler); + } + } } -class CalculatorUI extends JFrame -{ - private JTextField textField=new JTextField("0"); - - private JPanel panel=new JPanel(new GridLayout(5,4)); - private JButton bt11=new JButton("7"); - private JButton bt12=new JButton("8"); - private JButton bt13=new JButton("9"); - private JButton bt14=new JButton("/"); - private JButton bt21=new JButton("4"); - private JButton bt22=new JButton("5"); - private JButton bt23=new JButton("6"); - private JButton bt24=new JButton("*"); - private JButton bt31=new JButton("1"); - private JButton bt32=new JButton("2"); - private JButton bt33=new JButton("3"); - private JButton bt34=new JButton("-"); - private JButton bt41=new JButton("0"); - private JButton bt42=new JButton("."); - private JButton bt43=new JButton("="); - private JButton bt44=new JButton("+"); - private JButton bt51=new JButton("%"); - private JButton bt52=new JButton("!"); - private JButton bt53=new JButton("~"); - private JButton bt54=new JButton("^"); - JButton jb[]={bt11,bt12,bt13,bt14,bt21,bt22,bt23,bt24, - bt31,bt32,bt33,bt34,bt41,bt42,bt43,bt44,bt51,bt52,bt53,bt54}; - - class MyHandler implements ActionListener - { - String str=""; - - @Override - public void actionPerformed(ActionEvent e) { - JButton source=(JButton) e.getSource(); - - if(source==bt43) - { - str=str+"= "+CalcString.getRes(str); - textField.setText(str); - - int res=JOptionPane.showConfirmDialog(panel, "Calculated, Goon ?", "",JOptionPane.YES_NO_OPTION); - if(res==JOptionPane.YES_OPTION) - { - str=""; - textField.setText("0"); - } - else - System.exit(0); - - } - else - { - str=str+source.getText(); - textField.setText(str); - } - } - } - public CalculatorUI(String title) - { - super(title); - this.ComponentInit(); - MyHandler myHandler=new MyHandler(); - this.ListenerAdd(myHandler); - this.setLocation(300, 200); - this.setSize(600, 450); - } - - private void ComponentInit() - { - this.add(textField,BorderLayout.NORTH); - textField.setPreferredSize(new Dimension(300,80)); - textField.setHorizontalAlignment(JTextField.RIGHT); - textField.setFont(new Font("楷体",Font.PLAIN,32)); - textField.setEditable(false); - - this.add(panel,BorderLayout.CENTER); - panel.setPreferredSize(new Dimension(300,350)); - for(int i=0;i<20;i++){ - jb[i].setFont(new Font("楷体",Font.BOLD,32)); - panel.add(jb[i]); - } - - } - - private void ListenerAdd(MyHandler myHandler) - { - for(int i=0;i<20;i++){ - jb[i].addActionListener(myHandler); - } - } - +class CalcString { + + public static double getRes(String str) { + String s = ""; + double n1 = 0, n2, res = 0; + char op = 0; + + for (int i = 0; i < str.length(); i++) { + if ( + str.charAt(i) != '+' && + str.charAt(i) != '-' && + str.charAt(i) != '*' && + str.charAt(i) != '/' && + str.charAt(i) != '%' + ) { + s = s + str.charAt(i); + } else { + n1 = Double.parseDouble(s); + op = str.charAt(i); + s = ""; + } + } + n2 = Double.parseDouble(s); + + switch (op) { + case '+': + res = n1 + n2; + break; + case '-': + res = n1 - n2; + break; + case '*': + res = n1 * n2; + break; + case '/': + if (0 == n2) { + System.out.println("Error:/0"); + res = 0; + break; + } + res = n1 / n2; + break; + case '%': + res = (int) n1 % (int) n2; + break; + default: + } + + return res; + } } -class CalcString -{ - public static double getRes(String str) - { - String s=""; - double n1 = 0,n2,res = 0; - char op = 0; - - for(int i=0;i