1.计算类
public class Calculator {
/**
* @return : double 返回浮点型数值
* @param : double a,double b, String symbol
* @method : 对两个数进行四则运算
* @description :传递两个double型参数,一个运算符(+,-,×,÷),
* 根据运算符对这两个数进行计算。
*/
public static double calculate(double a,double b, String symbol){
double number=a+b; //计算的结果
if (symbol.equals("+")) { //加法
number=add(a, b);
}
else if (symbol.equals("-")) {//减法
number=minus(a, b);
}
else if (symbol.equals("×")) {//乘法
number=multiply(a, b);
}
else if (symbol.equals("÷")) {//除法
number=division(a, b);
}
else {
System.out.println("输入错误!");
}
return number;
}
/**
* @method :求两数之和
*/
public static double add(double a,double b){
return a+b;
}
/**
* @method :求两数之差
*/
public static double minus(double a,double b){
return a-b;
}
/**
* @method :求两数之积
*/
public static double multiply(double a,double b){
return a*b;
}
/**
* @method :求一个数除以一个数的余数
*/
public static double division(double a,double b){
return a/b;
}
}
2.窗体类(JFrame)
import javax.swing.JFrame;
public class CFrame extends JFrame{
private static final long serialVersionUID = 1L;
//窗体宽高
final int WIDTH=270;
final int HEIGHT=460;
/**
* 构造方法:创建对象即可实现
*/
public CFrame(){
setLayout(null); //设置绝对布局
setVisible(true); //设置可见
setSize(WIDTH,HEIGHT); //设置窗体宽高
setLocationRelativeTo(null); //设置居中显示
setResizable(false); //不可调整大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点击关闭
setContentPane(new CPanel()); //添加面板到窗体
}
public static void main(String[] args) {
new CFrame();//创建窗体匿名对象实例
}
}
3.面板类
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class CPanel extends JPanel{
//private static final long serialVersionUID = 1L;
//第一个组件初始位置
static final int X=10; //初始位置 :X
static final int Y=10; //初始位置 :Y
//面板宽高
static final int PANEL_WIDTH=250; //面板宽度
static final int PANEL_HEIGHT=360; //面板高度
//文本宽高
static final int TEXT_WIDTH=240; //文本域宽度
static final int TEXT_HEIGHT=100; //文本域高度
//按钮宽高
static final int BUTTON_WIDTH=50; //按钮宽度
static final int BUTTON_HEIGHT=50; //按钮高度
//按钮间距
static final int INTERVAL=10; //间距距离
//两个按钮组件的水平距离
static final int BUTTON_X=X+BUTTON_WIDTH;
//两个按钮组件的垂直距离
static final int BUTTON_Y=Y+TEXT_HEIGHT;
//创建文本域,用于显示计算的值
static JTextArea showArea=new JTextArea();
//设置字体
Font font =new Font("黑体",1,15);
public CPanel(){
showArea.setBounds(X-5, Y,TEXT_WIDTH, TEXT_HEIGHT); //设置文本框的初始位置(x,y)、大小(宽高)
showArea.setEditable(false); //设置不可编辑,可编辑:true
showArea.setFont(font); //设置字体
setBounds(1, 1,PANEL_WIDTH, PANEL_HEIGHT);//设置面板在窗体的位置
add(showArea); //添加文本框到面板
setLayout(null); //设置绝对定位布局
//1第一行按钮
//1.1创建按钮
JButton oneButton=new JButton("1");
JButton twoButton=new JButton("2");
JButton threeButton=new JButton("3");
JButton addButton=new JButton("+");
//1.2设置按钮在面板中的位置
oneButton.setBounds( X, BUTTON_Y+INTERVAL, BUTTON_WIDTH, BUTTON_HEIGHT);
twoButton.setBounds( BUTTON_X+INTERVAL, BUTTON_Y+INTERVAL, BUTTON_WIDTH, BUTTON_HEIGHT);
threeButton.setBounds((BUTTON_X*2)+INTERVAL, BUTTON_Y+INTERVAL, BUTTON_WIDTH, BUTTON_HEIGHT);
addButton.setBounds((BUTTON_X*3)+INTERVAL, BUTTON_Y+INTERVAL, BUTTON_WIDTH, BUTTON_HEIGHT);
//1.3添加按钮到面板
add(oneButton);
add(twoButton);
add(threeButton);
add(addButton);
/** 2第二行按钮 */
//2.1创建按钮
JButton fourButton=new JButton("4");
JButton fiveButton=new JButton("5");
JButton sixButton=new JButton("6");
JButton minusButton=new JButton("-");
//2.2设置按钮在面板中的位置
fourButton.setBounds( X, (BUTTON_Y+BUTTON_HEIGHT)+INTERVAL*2, BUTTON_WIDTH, BUTTON_HEIGHT);
fiveButton.setBounds(BUTTON_X+INTERVAL, (BUTTON_Y+BUTTON_HEIGHT)+INTERVAL*2, BUTTON_WIDTH, BUTTON_HEIGHT);
sixButton.setBounds ((BUTTON_X*2)+INTERVAL, (BUTTON_Y+BUTTON_HEIGHT)+INTERVAL*2, BUTTON_WIDTH, BUTTON_HEIGHT);
minusButton.setBounds((BUTTON_X*3)+INTERVAL, (BUTTON_Y+BUTTON_HEIGHT)+INTERVAL*2, BUTTON_WIDTH, BUTTON_HEIGHT);
//2.3添加按钮到面板
add(fourButton);
add(fiveButton);
add(sixButton);
add(minusButton);
//第三行按钮
//3.1创建按钮
JButton sevenButton=new JButton("7");
JButton eightButton=new JButton("8");
JButton nineButton=new JButton("9");
JButton multiplyButton=new JButton("×");
//3.2设置按钮在面板中的位置
sevenButton.setBounds( X, (BUTTON_Y+BUTTON_HEIGHT*2)+INTERVAL*3, BUTTON_WIDTH, BUTTON_HEIGHT);
eightButton.setBounds(BUTTON_X+INTERVAL, (BUTTON_Y+BUTTON_HEIGHT*2)+INTERVAL*3, BUTTON_WIDTH, BUTTON_HEIGHT);
nineButton.setBounds((BUTTON_X*2)+INTERVAL, (BUTTON_Y+BUTTON_HEIGHT*2)+INTERVAL*3, BUTTON_WIDTH, BUTTON_HEIGHT);
multiplyButton.setBounds((BUTTON_X*3)+INTERVAL,(BUTTON_Y+BUTTON_HEIGHT*2)+INTERVAL*3, BUTTON_WIDTH, BUTTON_HEIGHT);
//3.3添加按钮到面板
add(sevenButton);
add(eightButton);
add(nineButton);
add(multiplyButton);
//4第四行按钮
//4.1创建按钮
JButton pointButton=new JButton(".");
JButton zeroButton=new JButton("0");
JButton equalButton=new JButton("=");
JButton divisionButton=new JButton("÷");
//4.2设置按钮在面板上的位置
pointButton.setBounds( X, (BUTTON_Y+BUTTON_HEIGHT*3)+INTERVAL*4, BUTTON_WIDTH, BUTTON_HEIGHT);
zeroButton.setBounds( BUTTON_X+INTERVAL,(BUTTON_Y+BUTTON_HEIGHT*3)+INTERVAL*4, BUTTON_WIDTH, BUTTON_HEIGHT);
equalButton.setBounds( (BUTTON_X*2)+INTERVAL,(BUTTON_Y+BUTTON_HEIGHT*3)+INTERVAL*4, BUTTON_WIDTH, BUTTON_HEIGHT);
divisionButton.setBounds((BUTTON_X*3)+INTERVAL,(BUTTON_Y+BUTTON_HEIGHT*3)+INTERVAL*4, BUTTON_WIDTH, BUTTON_HEIGHT);
//4.3添加按钮到面板
add(pointButton);
add(zeroButton);
add(equalButton);
add(divisionButton);
JButton resetButton=new JButton("C");
add(resetButton);
resetButton.setBounds(X,(BUTTON_Y+BUTTON_HEIGHT*4)+INTERVAL*5, BUTTON_WIDTH*4+30, BUTTON_HEIGHT);
//5.侦听所有按钮
ListeningJButton listen=new ListeningJButton();
listen.listenButton(this, oneButton);
listen.listenButton(this, twoButton);
listen.listenButton(this, threeButton);
listen.listenButton(this, fourButton);
listen.listenButton(this, fiveButton);
listen.listenButton(this, sixButton);
listen.listenButton(this, sevenButton);
listen.listenButton(this, eightButton);
listen.listenButton(this, nineButton);
listen.listenButton(this, zeroButton);
listen.listenButton(this, addButton);
listen.listenButton(this, minusButton);
listen.listenButton(this, multiplyButton);
listen.listenButton(this, divisionButton);
listen.listenButton(this, resetButton);
listen.listenButton(this, equalButton);
listen.listenButton(this, pointButton);
}
}
4.侦听类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class ListeningJButton {
static double number1=0; //记录第一个数
static double number2=0; //记录第二个数
static double total=-1; //记录两个数的值
static String symbol="+"; //记录按下了哪个运算符
int count=0; //记录按下除=号意外运算符点击的次数:主要作用,判断它是不是第一次执行
/**
* @param :CPanel panel,JButton button
* @method :侦听CPanel面板上的按钮的方法()
* @description :该方法传递了两个参数,CPanel 类参数主要是为了获取该类面板上文本框的内容,当然,也可以不设置这个参数
* 因为文本框该文本框是静态对象,可以直接使用类.对象来调用。
*
*/
public void listenButton(CPanel panel,JButton button){
//侦听按钮
button.addActionListener(new ActionListener() {
String contact=""; //定义字符串对象,存储从文本框上获取的内容
public void actionPerformed(ActionEvent e) {
String value=e.getActionCommand(); //获取点击的按钮值
//点击+,-,×,÷时执行
if (value.equals("+")||value.equals("-")||value.equals("×")||value.equals("÷")) {
if (count>0) {//如果是第1+n次点击
CPanel.showArea.setText(String.valueOf(total));//把结果设为第一个数
}
symbol=value; //记录符号
count++;
}
//点击等于号时进行计算
if (value.equals("=")) {
//获取文本框内容
contact=CPanel.showArea.getText();
//只有输入内容时才会执行
if (contact.length()>0||symbol!="+"&&symbol!="-"&&symbol!="×"&&symbol!="÷") {
//取出第1-2个数
number1=getNumber(contact, 1);
number2=getNumber(contact, 2);
total=Calculator.calculate(number1, number2, symbol);
symbol="=";
value=String.valueOf(symbol+total);
}
//计算总值
}
//显示内容到文本框
CPanel.showArea.append(value);
//清空所有内容
if (value.equals("C")) {
//全部重置
CPanel.showArea.setText("");
count=0;
symbol="+";
number1=0;
number2=0;
}
}
});
}
/**
* @method :获取第x个数
* @param :String ,int x
* @exception:该方法获取字符串中的第x个数值,每个数值一某个字符结束。
* 比如:123+456,第一个数是123,第二个数是456
* 当x=2时,返回456。
*/
public static double getNumber(String string,int x){
double number=0; //定义返回值
int sign=1; //标记第几个数
String s="[0-9]"; //正则表达式:只能是数字
StringBuilder joint=new StringBuilder();//创建字符串拼接对象
//1.循环遍历每一个字符
for (int i = 0; i < string.length(); i++) {
//2.从0开始获取第i个字
String c=String.valueOf(string.charAt(i));
//如果c为数字,
if (c.matches(s)||c.equals(".")) {
joint.append(c);
}
//如果c不为数字
if (!c.matches(s)&&i!=0&&!c.equals(".")) {
//如果sign>x:退出当前循环
if (sign>=x) {
break;
}
sign++; //自增
//清空拼接对象内的字符
joint.delete(0, joint.length());
}
}
number=Double.parseDouble(String.valueOf(joint)); //转换为double类型的数
return number; //返回该数
}
}
代码能实现简单的四则运算,但还是有些BUG,以后有时间会完善的,新手上路,多多指教。