java组件——实现一个计算器
package com.tulun.dao;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* @ClassName Count
* @Description 计算器
* @Author lzq
* @Date 2018/12/21 11:02
* @Version 1.0
**/
public class Count extends JApplet implements ActionListener {
private static final long serialVersionUID = 1L;
private JTextField textField = new JTextField("请输入");
String input = "";//输入的 式子
/**
* 覆写Applet里边的init方法
*/
public void init() {
Container C = getContentPane();
JButton b[] = new JButton[16];
JPanel panel = new JPanel();
C.add(textField, BorderLayout.NORTH);
C.add(panel, BorderLayout.CENTER);
panel.setLayout(new GridLayout(4, 4, 5, 5));
String name[] = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", "C", "=", "/"};//设置 按钮
//添加按钮
for (int i = 0; i < 16; i++) {
b[i] = new JButton(name[i]);
b[i].setBackground(new Color(192, 192, 192));
b[i].setForeground(Color.BLUE);//数字键 设置为 蓝颜色
if (i % 4 == 3) {
b[i].setForeground(Color.RED);
}
b[i].setFont(new Font("宋体", Font.PLAIN, 16));//设置字体格式
panel.add(b[i]);
b[i].addActionListener(this);
}
b[13].setForeground(Color.RED);//非数字键,即运算键设置为红颜色
b[13].setForeground(Color.RED);
}
/**
* 处理按钮单击方法
* @param e
*/
@Override
public void actionPerformed(ActionEvent e) {
int cnt = 0;
String actionCommand = e.getActionCommand();
if (actionCommand.equals("+") || actionCommand.equals("-") ||
actionCommand.equals("*") || actionCommand.equals("/")) {
input += " " + actionCommand + " ";//设置输入,把输入的样式改成 需要的样子
} else if (actionCommand.equals("C")) {
input = "";
} else if (actionCommand.equals("=")) {//当监听到等号时,则处理 input
input += "=" + compute(input);
textField.setText(input);
input = "";
cnt = 1;
} else {
input += actionCommand;//数字为了避免多位数的输入 不需要加空格
}
if (cnt == 0) {
textField.setText(input);
}
}
/**
* 计算
* @param input
* @return
*/
private String compute(String input) {
String str[];
str = input.split(" ");
Stack<Double> s = new Stack<Double>();
double m = Double.parseDouble(str[0]);
s.push(m);
for (int i = 1; i < str.length; i++) {
if (i % 2 == 1) {
if (str[i].compareTo("+") == 0) {
double help = Double.parseDouble(str[i + 1]);
s.push(help);
}
if (str[i].compareTo("-") == 0) {
double help = Double.parseDouble(str[i + 1]);
s.push(-help);
}
if (str[i].compareTo("*") == 0) {
double help = Double.parseDouble(str[i + 1]);
double ans = s.peek();//取出栈顶元素
s.pop();//消栈
ans *= help;
s.push(ans);
}
if (str[i].compareTo("/") == 0) {
double help = Double.parseDouble(str[i + 1]);
double ans = s.peek();
s.pop();
ans /= help;
s.push(ans);
}
}
}
double ans = 0d;
while(!s.isEmpty()){
ans+=s.peek();
s.pop();
}
String result = String.valueOf(ans);
return result;
}
}
package com.tulun.main;
import com.tulun.dao.Count;
import javax.swing.*;
import java.awt.*;
/**
* @ClassName TestDemo5
* @Description 计算器测试类
* @Author lzq
* @Date 2018/12/21 11:11
* @Version 1.0
**/
public class TestDemo5 {
public static void main(String args[]){
JFrame frame = new JFrame("Count");
Count applet = new Count();
frame.getContentPane().add(applet, BorderLayout.CENTER);
applet.init();//applet的init方法
applet.start();//线程开始
frame.setSize(350, 400);//设置窗口大小
frame.setVisible(true);//设置窗口可见
}
}
运行结果: