package com.xawx.demo;import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;@SuppressWarnings("serial")
public class Counter extends JFrame {
/** 创建面板jPanel1,jPanel2 **/
private JPanel jPanel1, jPanel2;
/** 创建文本框 jTextField**/
private JTextField jTextField,jTextFieldm;
/** 创建按钮 jButton **/
private JButton jButton;
public JButton[] buttons = new JButton[25];
/** 创建事件监听器的对象 ml**/
private MyActionListener ml;
public static final String[] names = { "←", "7", "8", "9", "÷", "C", "4",
"5", "6", "×", "Γ", "1", "2", "3", "-", "M", "0", "±", ".", "+",
"MC", "MS", "M+", "M-", "MR" }; public Counter() {
super("计算器");
setLayout(null);
ml = new MyActionListener(this);
jPanel1 = new JPanel(null);
jPanel1.setBounds(5, 0, 300, 40);
jTextField = new JTextField(25);
jTextFieldm = new JTextField(5);
jTextFieldm.setBounds(0, 10, 55, 30);
jTextField.setBounds(60, 10, 173, 30);
jTextField.setEditable(false);
jTextFieldm.setEditable(false);
jTextField.setHorizontalAlignment(JTextField.RIGHT);
jButton = new JButton("=");
jButton.setBounds(240, 10, 55, 30);
jButton.addActionListener(ml);
jPanel1.add(jTextFieldm);
jPanel1.add(jTextField);
jPanel1.add(jButton);
this.add(jPanel1);
FlowLayout layout = new FlowLayout(0);
layout.setVgap(5);
layout.setHgap(5);
jPanel2 = new JPanel();
jPanel2.setLayout(layout);
jPanel2.setBounds(0, 40, 300, 290);
for (int i = 0; i < buttons.length; i++) {
buttons[i] = new JButton(names[i]);
jPanel2.add(buttons[i]);
Dimension d = new Dimension(55, 30);
buttons[i].setPreferredSize(d);
buttons[i].addActionListener(ml);
}
this.add(jPanel2); this.setSize(311, 245);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
} public static void main(String[] args) {
new Counter();
} public JButton getJButton(int i) {
return buttons[i];
} public JButton getJButton() {
return jButton;
} public JTextField getJTextField() {
return jTextField;
}
public JTextField getJTextFieldm() {
return jTextFieldm;
}
}class MyActionListener implements ActionListener {
/** 创建一个变量result用来接收结果 **/
public static double result = 0;
/** 创建一个变量nowInput用来接收当前文本框内的值 **/
public static double nowInput = 0;
/** 创建一个变量mem用来接收输入运算符前文本框内的数据 **/
public static double mem;
/** 创建一个变量me用来储存一个数据 **/
public static double me;
/** 初始化对象一个ActionEvent对象e **/
private ActionEvent e;
/** 创建一个变量 memory用来接收发生事件时所获取的字符串和运算符号组成的字符串 **/
private String memory;
/** 创建一个变量 string用来接收输入的字符初始非空 **/
private String string = "";
/** 创建一个变量 string用来接收运算符 **/
private String yunsuanfu = "";
/** 创建Counter类的对象 **/
private Counter counter;
/** 创建一个regexStr字符串作为匹配double型数字的模式 **/
private String regexStr = "[-]?([1-9][0-9]+[.]?||[0-9][.])[0-9]*";
/** 创建一个字符串regex作为匹配发生运算事件时文本框内的值和运算符 **/
private String regex = "[-]?([1-9][0-9]+[.]?||[0-9][.])[0-9]*[-+×÷Γ±=pm]$";
/** 创建一个字符串regex1作为匹配发生运算事件时运算符 **/
private String regex1 = "[+]", regex2 = "[-]", regex3 = "[×]",
regex4 = "[÷]", regex5 = "[Γ]", regex6 = "[±]", regex7 = "p",
regex8 = "m";
/** 创建一个字符串变量s1用来接收输入数字时的字符串 s 用来获取发生输入数字前文本框内的字符串 **/
private String s1, s; public MyActionListener(Counter counter) {
this.counter = counter;
} /**
 *方法ways用来获取按数字键时文本框内的字符串并储存在string中
 */
public void ways() {
String s1 = e.getActionCommand();
String s = counter.getJTextField().getText();
string = s + s1;
boolean f1 = string.matches(regexStr);
if (f1) {
counter.getJTextField().setText(string);
} else {
counter.getJTextField().setText("请正确输入数字");
}
}
/**
 * 当按下=时判断发生运算的符号 并进行相应的运算
 */
public void ways2() {
if(string == null || "".equals(string)){
return;
}
nowInput = Double.parseDouble(string);
boolean f = (memory).matches(regex);
if (f) {
boolean f1 = yunsuanfu.matches(regex1);
boolean f2 = yunsuanfu.matches(regex2);
boolean f3 = yunsuanfu.matches(regex3);
boolean f4 = yunsuanfu.matches(regex4);
boolean f5 = yunsuanfu.matches(regex5);
boolean f6 = yunsuanfu.matches(regex6);
boolean f7 = yunsuanfu.matches(regex7);
boolean f8 = yunsuanfu.matches(regex8);
if (f1) {
result = mem + nowInput;
} else if (f2) {
result = mem - nowInput;
} else if (f3) {
result = mem * nowInput;
} else if (f4) {
result = mem / nowInput;
} else if (f5) {
result = Math.sqrt(mem);
} else if (f6) {
result = mem;
} else if (f7) {
result = mem + me;
} else if (f8) {
result = mem - me;
}
counter.getJTextField().setText(Double.toString(result));
string = Double.toString(result);
}
}
/**
 * 当按下运算符时接收 输入前文本框内的字符串并转为double型的数据
 */
public void ways3() {
if(string == null || "".equals(string)){
return;
}else{
nowInput = Double.parseDouble(string);
mem = nowInput;
counter.getJTextField().setText("");
memory = Double.toString(nowInput) + yunsuanfu;
nowInput = 0;
}
} /**
 * 
 */
public void actionPerformed(ActionEvent e) {
this.e = e;
JTextField jTextField = counter.getJTextField();
if (e.getSource() == counter.getJButton(0)) { // ←
s = jTextField.getText();
if(s.length() > 1){
s1 = s.substring(0, s.length() - 1);
}else{
s1 = "";
}
string = s1;
jTextField.setText(s1);
if(s1 != null && !"".equals(s1)){
nowInput = Double.parseDouble(s1);
}else{
nowInput = 0.0;
}
} else if (e.getSource() == counter.getJButton(1)) { // 7
ways();
} else if (e.getSource() == counter.getJButton(2)) { // 8
ways();
} else if (e.getSource() == counter.getJButton(3)) { // 9
ways();
} else if (e.getSource() == counter.getJButton(4)) { // 除号
yunsuanfu = "÷";
ways3();
} else if (e.getSource() == counter.getJButton(5)) { // C
jTextField.setText("");
string = "";
} else if (e.getSource() == counter.getJButton(6)) { // 4
ways();
} else if (e.getSource() == counter.getJButton(7)) { // 5
ways();
} else if (e.getSource() == counter.getJButton(8)) { // 6
ways();
} else if (e.getSource() == counter.getJButton(9)) { // 乘号
yunsuanfu = "×";
ways3();
} else if (e.getSource() == counter.getJButton(10)) { // 根号
if(string == null || "".equals(string)){
return;
}
yunsuanfu = "Γ";
nowInput = Double.parseDouble(string);
mem = nowInput;
counter.getJTextField().setText("");
memory = Double.toString(nowInput) + yunsuanfu;
} else if (e.getSource() == counter.getJButton(11)) { // 1
ways();
} else if (e.getSource() == counter.getJButton(12)) { // 2
ways();
} else if (e.getSource() == counter.getJButton(13)) { // 3
ways();
} else if (e.getSource() == counter.getJButton(14)) { // -
yunsuanfu = "-";
ways3();
} else if (e.getSource() == counter.getJButton(15)) { // M
if(string == null || "".equals(string)){
return;
}else{
me = Double.parseDouble(string);
counter.getJTextFieldm().setText("M");
}
} else if (e.getSource() == counter.getJButton(16)) { // 0
ways();
} else if (e.getSource() == counter.getJButton(17)) { // +_
if(string == null || "".equals(string)){
return;
}
yunsuanfu = "±";
nowInput = 0 - Double.parseDouble(string);
mem = nowInput;
string = Double.toString(nowInput);
jTextField.setText(Double.toString(mem));
memory = Double.toString(nowInput) + yunsuanfu;
} else if (e.getSource() == counter.getJButton(18)) { // .
ways();
} else if (e.getSource() == counter.getJButton(19)) { // +
yunsuanfu = "+";
ways3();
} else if (e.getSource() == counter.getJButton(20)) { // MC
me = 0;
counter.getJTextFieldm().setText("");
} else if (e.getSource() == counter.getJButton(21)) { // MS
if(string == null || "".equals(string)){
return;
}
me = Double.parseDouble(string);
counter.getJTextFieldm().setText("M");
} else if (e.getSource() == counter.getJButton(22)) { // M+
if(string == null || "".equals(string)){
return;
}else{
yunsuanfu = "p";
nowInput = Double.parseDouble(string);
mem = nowInput;
counter.getJTextField().setText("");
memory = string + yunsuanfu;
}
} else if (e.getSource() == counter.getJButton(23)) { // M-

if(string == null || "".equals(string)){
return;
}else{
yunsuanfu = "m";
nowInput = Double.parseDouble(string);
mem = nowInput;
counter.getJTextField().setText("");
memory = string + yunsuanfu;
}
} else if (e.getSource() == counter.getJButton(24)) { // MR
counter.getJTextField().setText(Double.toString(me));
}
if (e.getSource() == counter.getJButton()) {
ways2();
}
}
}
我在网星学习2个半月了,从什么都不懂,到慢慢的学习!不断的练习,这个是老师去北京培训3G时布置的作业!写一个计算器!用我们现阶段的知识!学到了java基础的面板部分 AWT包里面的东西还没讲完!