Java Swing计算器

来源:互联网 发布:什么是矩阵的特征值 编辑:程序博客网 时间:2024/05/17 08:43

最近刚看完Swing和AWT,做了一个小计算器,功能很简单,就是连续的运算还是做不了…希望大家能给我一点意见~~哈哈

我想再过段时间加入能用键盘输入的,学习键盘监听…

 


import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.Panel;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.math.BigDecimal;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextField;/** *  * 计算器,鼠标点击可以运算 */public class CalCulator extends JFrame implements ActionListener {private Panel panel_1 = new Panel(); // 新建一个容器private Panel panel_2 = new Panel();private JTextField jf = new JTextField(30);private boolean app = true; // 用来在文本框中追加显示private String s1 = "0"; // 获取需要运算的数字private String s2 = "0"; // 存放运算后的结果private int cal = 0; // 根据点击的符号去判断运算方式,默认0:+,1:-,2:*,3:/private double d1 = 0.0;private double d2 = 0.0;public CalCulator() {super("计算器");jf.setText("0"); // 设置文本框的初始值是0jf.setEditable(false); // 设置文本框是不能编辑的jf.setHorizontalAlignment(JTextField.RIGHT); // 设置文本框文字的方向panel_1.add(jf); // 在容器1里放入文本框this.add(panel_1, BorderLayout.NORTH); // 在面板里加入容器一,位置在边框布局的北方panel_2.setLayout(new GridLayout(5, 4)); // 设置容器二的布局为网格式布局String[] name = { "backspace", "CE", "C", "+", "7", "8", "9", "-", "4","5", "6", "*", "1", "2", "3", "/", "0", "+/-", ".", "=" };JButton[] buttons = new JButton[name.length]; // 新建一个Jbutton数组for (int i = 0; i < name.length; i++) {buttons[i] = new JButton(name[i]);buttons[i].addActionListener(this);// 为按钮注册监听器,同时还要继承ActionListener接口,这是从http://www.gidforums.com/t-10898.html查到的panel_2.add(buttons[i]); // 向容器二中添加按钮}this.add(panel_2, BorderLayout.SOUTH);// 设置窗体属性this.pack();this.setVisible(true);}public void actionPerformed(ActionEvent e) {String comm = e.getActionCommand();// 得到按钮能够产生的命令if (comm.matches("//d")) { // 使用正则表达式来判断点击的是不是数字区域if (app) { // 如果app为真,代表文本框上没有数字,直接在文本框上打印数字jf.setText(comm);app = false;} else { // 当app为false时,代表文本框上已经有数字,在后面继续追加输入的数字String textStr = jf.getText();if (textStr.startsWith("0")) {jf.setText(textStr.substring(1) + comm);} else {jf.setText(textStr + comm);}}} else if (comm.equals(".")) { // 如果输入的是小数点if (jf.getText().indexOf(".") == -1 && app) { // 同上,如果之前没有小数点,在文本框添加小数点,同时将app的值设为falsejf.setText(jf.getText() + ".");app = false;} else if (app == false) { // app的值为false,代表文本框已有小数点,直接在后面追加String textStr = jf.getText();jf.setText(textStr + comm);}} else if ("+-*/".indexOf(comm) != -1) { // 如果点击的是+—*/s1 = jf.getText();d1 = Double.parseDouble(s1);if (comm.equals("+")) {cal = 0;}if (comm.equals("-")) {cal = 1;}if (comm.equals("*")) {cal = 2;}if (comm.equals("/")) {cal = 3;}jf.setText("0");} else if ("=".equals(comm)) { // 点击=s2 = jf.getText();d2 = Double.parseDouble(s2);jf.setText("");if (cal == 0) { // 实现加法double sum = d1 + d2;String sm = sum + "";jf.setText(sm);}if (cal == 1) { // 实现减法double sub = d1 - d2;String sb = sub + "";jf.setText(sb);}if (cal == 2) { // 实现乘法double mil = d1 * d2;String ml = mil + "";jf.setText(ml);}if (cal == 3) { // 实现除法double di = d1 / d2;String d = di + "";jf.setText(d);}} else if ("CE".equals(comm)) {jf.setText("0");} else if ("C".equals(comm)) {jf.setText("0");} else if ("backspace".equals(comm)) {String temp = jf.getText();if (temp.equals("")) {jf.setText("0");} else if(temp.length()>0) {jf.setText(temp.substring(0, temp.length() - 1));}} else if (comm.equals("+/-")) { // 实现+/-String temp = jf.getText();if (app) {jf.setText("-");app = false;}if (temp.startsWith("-")) {jf.setText(temp.substring(1));} else {jf.setText("-" + temp);}}}public static void main(String[] args) {new CalCulator();}}


原创粉丝点击