简易计算器

  1 import java.awt.Color;
  2 import java.awt.Container;
  3 import java.awt.Font;
  4 import java.awt.GridBagConstraints;
  5 import java.awt.GridBagLayout;
  6 import java.awt.Insets;
  7 import java.awt.event.ActionEvent;
  8 import java.awt.event.ActionListener;
  9 import javax.swing.*;
 10 
 11 public class Desktop extends JFrame {
 12     private Container container = this.getContentPane();
 13     private GridBagLayout gridBagLayout = new GridBagLayout();
 14     private GridBagConstraints gridBagConstraints = new GridBagConstraints();
 15     private JTextField displayField;
 16     private String lastCommand = "=";
 17     private double result = 0.0d;
 18     private boolean start = true;
 19 
 20     public Desktop() {
 21         super("JAVA图形化界面计算器");
 22         container.setLayout(gridBagLayout);
 23         initDisplayArea();
 24         initButtons();
 25         initFrame();
 26     }
 27 
 28     private void initFrame() {
 29         setSize(900, 900);
 30         setVisible(true);
 31         setResizable(false);
 32         setForeground(Color.MAGENTA);
 33         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
 34     }
 35 
 36     private void initButtons() {
 37         ActionListener insert = new Desktop.InsertAction();
 38         ActionListener command = new Desktop.CommandAction();
 39         addButton("Back", 0, 1, 2, 1, insert);
 40         addButton("清零", 2, 1, 2, 1, insert);
 41         addButton("7", 0, 2, 1, 1, insert);
 42         addButton("8", 1, 2, 1, 1, insert);
 43         addButton("9", 2, 2, 1, 1, insert);
 44         addButton("+", 3, 2, 1, 1, command);
 45         addButton("4", 0, 3, 1, 1, insert);
 46         addButton("5", 1, 3, 1, 1, insert);
 47         addButton("6", 2, 3, 1, 1, insert);
 48         addButton("-", 3, 3, 1, 1, command);
 49         addButton("1", 0, 4, 1, 1, insert);
 50         addButton("2", 1, 4, 1, 1, insert);
 51         addButton("3", 2, 4, 1, 1, insert);
 52         addButton("*", 3, 4, 1, 1, command);
 53         addButton("0", 0, 5, 1, 1, insert);
 54         addButton("-", 1, 5, 1, 1, insert);
 55         addButton(".", 2, 5, 1, 1, insert);
 56         addButton("/", 3, 5, 1, 1, command);
 57         addButton("=", 0, 6, 4, 1, command);
 58     }
 59 
 60     private void initDisplayArea() {
 61         displayField = new JTextField(20);
 62         displayField.setHorizontalAlignment(4);
 63         displayField.setBackground(Color.gray);
 64         displayField.setDisabledTextColor(Color.MAGENTA);
 65         displayField.setEnabled(false);
 66         displayField.setFont(new Font("宋体", Font.BOLD, 50));
 67         gridBagConstraints.gridx = 0;
 68         gridBagConstraints.gridy = 0;
 69         gridBagConstraints.gridwidth = 4;
 70         gridBagConstraints.gridheight = 1;
 71         gridBagConstraints.fill = 1;
 72         gridBagConstraints.weightx = 1;
 73         gridBagConstraints.weighty = 1;
 74         gridBagLayout.setConstraints(displayField, gridBagConstraints);
 75         container.add(displayField);
 76     }
 77 
 78     private void addButton(String label, int column, int row, int with, int height, ActionListener listener) {
 79         JButton button = new JButton(label);
 80         button.setForeground(Color.MAGENTA);
 81         button.setFont(new Font("楷体", Font.BOLD, 36));
 82         button.addActionListener(listener);
 83         gridBagConstraints.gridx = column;
 84         gridBagConstraints.gridy = row;
 85         gridBagConstraints.gridwidth = with;
 86         gridBagConstraints.gridheight = height;
 87         gridBagConstraints.fill = GridBagConstraints.BOTH;
 88         gridBagConstraints.insets = new Insets(1, 1, 1, 1);
 89         gridBagLayout.setConstraints(button, gridBagConstraints);
 90         container.add(button);
 91     }
 92 
 93     public void calculate(double x) {
 94         if (this.lastCommand.equals("+")) {
 95             this.result += x;
 96         } else if (this.lastCommand.equals("-")) {
 97             this.result -= x;
 98         } else if (this.lastCommand.equals("*")) {
 99             this.result *= x;
100         } else if (this.lastCommand.equals("/")) {
101             this.result /= x;
102         } else if (this.lastCommand.equals("=")) {
103             this.result = x;
104         }
105 
106         this.displayField.setText("" + this.result);
107     }
108 
109     public static void main(String[] args) {
110         new Desktop();
111     }
112 
113     private class CommandAction implements ActionListener {
114         private CommandAction() {
115         }
116 
117         public void actionPerformed(ActionEvent evt) {
118             String command = evt.getActionCommand();
119             if (Desktop.this.start) {
120                 Desktop.this.lastCommand = command;
121             } else {
122                 Desktop.this.calculate(Double.parseDouble(Desktop.this.displayField.getText()));
123                 Desktop.this.lastCommand = command;
124                 Desktop.this.start = true;
125             }
126         }
127     }
128 
129     private class InsertAction implements ActionListener {
130         private InsertAction() {
131         }
132 
133         public void actionPerformed(ActionEvent event) {
134             String input = event.getActionCommand();
135             if (Desktop.this.start) {
136                 Desktop.this.displayField.setText("");
137                 Desktop.this.start = false;
138                 if (input.equals("-")) {
139                     Desktop.this.displayField.setText(Desktop.this.displayField.getText() + "-");
140                 }
141             }
142 
143             if (!input.equals("-")) {
144                 if (input.equals("Back")) {
145                     String str = Desktop.this.displayField.getText();
146                     if (str.length() > 0) {
147                         Desktop.this.displayField.setText(str.substring(0, str.length() - 1));
148                     }
149                 } else if (input.equals("清零")) {
150                     Desktop.this.displayField.setText("0");
151                     result = 0.0d;
152                     Desktop.this.start = true;
153                 } else {
154                     if (input.equals(".")) {
155                         if (Desktop.this.displayField.getText().trim().indexOf(".") == -1) {
156                             Desktop.this.displayField.setText(Desktop.this.displayField.getText() + input);
157                         }
158                     } else {
159                         Desktop.this.displayField.setText(Desktop.this.displayField.getText() + input);
160                     }
161                 }
162             }
163 
164         }
165     }
166 }
原文地址:https://www.cnblogs.com/datacenter/p/11447724.html