import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
class Normal{
double i,j;
i=num1;
}
public double puls(){
return i◆j;
public double subtract(){
return i-j;
public double multiply(){
return i*j;
return i/j;
public double surpuls(){
return i%j;
class scientific extends Normal{
public class calc extends JFrame{
public static void main(String[] args) {
viewNormal VN= new viewNormal("normal");
class viewNormal extends JFrame implements ActionListener{
JLabel jl;
JButton[] jb;
JButton jbs,jbo,jba,jbb,jbc,jby;
StringBuffer sb = new StringBuffer();
Normal normal;
int dot=0;
double fnum=0;
double lnum=0;
double result;
String sign=null;
public viewNormal(String title){
setTitle(title);
setLayout(null);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jb[i]=new JButton(""◆(i◆1));
jp1.add(jb[i]);
jb[i].addActionListener(this);
jb[10]=new JButton("0");
jb[11]=new JButton("=");
jb[10].addActionListener(this);
jb[11].addActionListener(this);
jp1.add(jb[10]);
jp1.add(jb[11]);
jbs= new JButton("◆");jbo= new JButton("-");jba= new JButton("*");
jbb= new JButton("/");jby= new JButton("%");jbc= new JButton("C");
jbs.addActionListener(this);jbo.addActionListener(this);jba.addActionListener(this);
jbb.addActionListener(this);jby.addActionListener(this);jbc.addActionListener(this);
jl= new JLabel("0",JLabel.RIGHT);
jl.setBackground(Color.white);
jl.setOpaque(true);
add(jl);
add(jp1);
//◆
public void sum(){
lnum=Double.parseDouble(sb.toString());
normal=new Normal(fnum,lnum);
fnum=normal.puls();
result=fnum;
//-
private void sub() {
System.out.println(sb.toString());
fnum=normal.subtract();
//*
private void mul() {
fnum=normal.multiply();
// /
//%
private void sur() {
fnum=normal.surpuls();
// =
private void same(){
if(sign.equals("◆")){
sum();
if(sign.equals("-")){
sub();
if(sign.equals("*")){
mul();
if(sign.equals("/")){
if(sign.equals("%")){
sur();
//result
public void Result(){
if(result%1!=0)
jl.setText(""◆result);
else
{
int i=(int)result;
jl.setText(""◆i);
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println(sb.toString());
if(e.getSource()==jb[i]!sb.toString().equals("0")){
sb.append(jb[i].getText());
jl.setText(sb.toString());
else if(e.getSource()==jb[i]sb.toString().equals("0")){
int d=sb.length();
sb.delete(0, d);
// 0
if(e.getSource()==jb[10]!sb.toString().equals("0")){
sb.append(jb[10].getText());
// .
dot◆◆;
// =
if(e.getSource()==jb[11]!sb.toString().equals("")){
same();
Result();
dot=0;
// ◆
if(e.getSource()==jbs!sb.toString().equals("")){
if(sign!="◆"sign!=null)
sign ="◆";
if(e.getSource()==jbo!sb.toString().equals("")){
if(fnum==0)
if(sign!="-"sign!=null)
sign ="-";
if(e.getSource()==jba!sb.toString().equals("")){
fnum=1;
if(sign!="*"sign!=null)
sign ="*";
// /
if(e.getSource()==jbb!sb.toString().equals("")){
if(sign!="/"sign!=null)
sign ="/";
// if(e.getSource()==jby!sb.toString().equals("")){
// if(fnum==0){
// fnum=Double.parseDouble(sb.toString());
// result=fnum;
// }
// else {
// if(sign!="%"sign!=null)
// same();
// else{
// lnum=Double.parseDouble(sb.toString());
// normal=new Normal(fnum,lnum);
// fnum=normal.surpuls();
// }
// sign ="%";
// Result();
// int d=sb.length();
// sb.delete(0, d);
// dot=0;
// }
//clear
if(e.getSource()==jbc){
jl.setText("0");
fnum=0;
lnum=0;
sign=null;
class viewScientific extends viewNormal{
public viewScientific(String title){
super(title);
//等号以后输入符号用不了, String转 double 本来就有错误,你可以用我的扩展成科学型的.
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
/**
* 我的计算器.Cheshi 继承于 JFrame,是计算器的界面
c*/
public class Cheshi extends JFrame {
private JTextField textbox = new JTextField("0");
private CalculatorCore core = new CalculatorCore();
private ActionListener listener = new ActionListener() {
JButton b = (JButton) e.getSource();
String label = b.getText();
String result = core.process(label);
textbox.setText(result);
};
public Cheshi(String title) throws HeadlessException {
super(title); // 调用父类构造方法
setupFrame(); // 调整窗体属性
setupControls(); // 创建控件
private void setupControls() {
setupDisplayPanel(); // 创建文本面板
setupButtonsPanel(); // 创建按钮面板
// 创建按钮面板并添加按钮
private void setupButtonsPanel() {
JPanel panel = new JPanel();
panel.setBorder(border);
createButtons(panel, new String[]{
"0", ".", "=", "/", ""
});
this.add(panel, BorderLayout.CENTER);
* 在指定的面板上创建按钮
*
* @param panel 要创建按钮的面板
* @param labels 按钮文字
*/
private void createButtons(JPanel panel, String[] labels) {
for (String label : labels) {
// 如果 label 为空,则表示创建一个空面板.否则创建一个按钮.
if (label.equals("")) {
panel.add(new JPanel());
} else {
JButton b = new JButton(label);
b.addActionListener(listener); // 为按钮添加侦听器
panel.add(b);
// 设置显示面板,用一个文本框来作为计算器的显示部分.
private void setupDisplayPanel() {
panel.setLayout(new BorderLayout());
setupTextbox();
panel.add(textbox, BorderLayout.CENTER);
this.add(panel, BorderLayout.NORTH);
// 调整文本框
private void setupTextbox() {
textbox.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐
textbox.setEditable(false); // 文本框只读
textbox.setBackground(Color.white); // 文本框背景色为白色
// 调整窗体
private void setupFrame() {
this.setDefaultCloseOperation(EXIT_ON_CLOSE); // 当窗体关闭时程序结束
this.setResizable(false); // 窗体大小固定
// 程序入口
public static void main(String[] args) throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Cheshi frame = new Cheshi("我的计算器");
frame.setVisible(true); // 在桌面上显示窗体
class CalculatorCore {
boolean reset = true;
private String operator;
private HashMapString, Operator operators = new HashMapString, Operator();
private HashMapString, Processor processors = new HashMapString, Processor();
CalculatorCore() {
setupOperators();
setupProcessors();
// 为每种命令添加处理方式
private void setupProcessors() {
public void calculate(String command) {
numberClicked(command);
processors.put("\\.", new Processor() {
dotClicked();
processors.put("=", new Processor() {
equalsClicked();
processors.put("[◆\\-*/]", new Processor() {
operatorClicked(command);
processors.put("C", new Processor() {
clearClicked();
processors.put("CE", new Processor() {
clearErrorClicked();
// 为每种 operator 添加处理方式
private void setupOperators() {
operators.put("◆", new Operator() {
operators.put("-", new Operator() {
operators.put("*", new Operator() {
operators.put("/", new Operator() {
// 根据命令处理.这里的命令实际上就是按钮文本.
public String process(String command) {
for (String pattern : processors.keySet()) {
if (command.matches(pattern)) {
processors.get(pattern).calculate(command);
break;
// 当按下 CE 时
private void clearErrorClicked() {
if (operator == null) {
number1 = null;
reset = true;
// 当按下 C 时,将计算器置为初始状态.
private void clearClicked() {
operator = null;
// 当按下 = 时
private void equalsClicked() {
calculateResult();
// 计算结果
private void calculateResult() {
Operator oper = operators.get(operator);
if (oper != null) {
// 当按下 ◆-*/ 时(这里也可以扩展成其他中间操作符)
private void operatorClicked(String command) {
if (operator != null) {
operator = command;
// 当按下 . 时
private void dotClicked() {
} else if (reset) {
reset = false;
private void numberClicked(String command) {
if (reset) {
// 运算符处理接口
interface Operator {
// 按钮处理接口
interface Processor {
void calculate(String command);
package?jisuanqi;
import?java.awt.BorderLayout;
import?java.awt.Color;
import?java.awt.GridLayout;
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;
public?class?Calculator?extends?JFrame?implements?ActionListener{??//建一个Calculator类继承JFrame实现ActionListener
public?static?void?main?(String?args[]){
Calculator?calculator=new?Calculator();??//创建对象calculator
calculator.setVisible(true);???//窗口可见
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);?//关闭图标后结束程序
String?command?[]={"backspace","C"};//功能键
JButton?KEYS?[]=new?JButton[keys.length];//创建键对象
JButton?COMMAND[]=new?JButton[command.length];//功能键对象
static?JTextField?resultSet=new?JTextField();//建一个文本框
double?resultNum;??//结果
String?operator="";//运算符?---------------------------
public?Calculator()?{//?构造函数
super();?
init();//初始化计算器
this.setBackground(Color.WHITE);//this代表用当前构造方法创建的对象
this.setTitle("简单计算器");?//窗口标题
this.pack();//使组件大小合适
void?init()?{?//初始化计算器
resultSet.setHorizontalAlignment(JTextField.RIGHT);??//设置文本框内容向右对齐
resultSet.setBackground(Color.WHITE);???//设置文本框背景颜色
JPanel?keysPanel=new?JPanel();//创建一个面板
for?(int?i=0;ikeys.length;i◆◆)?{?//把数字键和符号键设为按钮
KEYS[i]=new?JButton(keys[i]);
keysPanel.add(KEYS[i]);??//把按钮加到面板中
JPanel?comPanel=new?JPanel();??//创建命令键面板
for(int?i=0;icommand.length;i◆◆)?{?//把命令键设置为按钮
COMMAND[i]=new?JButton(command[i]);
comPanel.add(COMMAND[i]);??//把按钮放到面板上
JPanel?pane=new?JPanel();?//创建面板
pane.setLayout(new?BorderLayout());?//面板布局为区域型
pane.add(comPanel,BorderLayout.NORTH);??//把命令面板加入到大面板上
pane.add(keysPanel,BorderLayout.CENTER);//把数字键面板加到大面板
getContentPane().setLayout(new?BorderLayout());??//设置底层容器的布局为区域型
getContentPane().add(resultSet,BorderLayout.NORTH);?//把文本框放到北面
getContentPane().add(pane,BorderLayout.CENTER);?//把大面板放到中央
for(int?i=0;ikeys.length;i◆◆){
KEYS[i].addActionListener(this);//为按钮添加监听器
for(int?i=0;icommand.length;i◆◆){
COMMAND[i].addActionListener(this);?
//处理事件?
public?void?actionPerformed(ActionEvent?e){?
String?lable=e.getActionCommand();
if(lable.equals("backspace")){?//如果命令为backspace
backspace();
else?if?(lable.equals("C")){??//如果命令为C
Clear();
else?if?(Character.isDigit(lable.charAt(0)))?{??//---------------
if(resultSet.getText().equals("0")){
resultSet.setText("");
resultSet.setText(resultSet.getText()◆lable);
else?if?(lable.equals(".")){
point();
else?if?(lable.equals("=")){
equal();
else?{
doOperation();
operator=lable;
void?point()?{
String?s=resultSet.getText();
if(s.indexOf(".")==-1){
resultSet.setText(s◆".");
void?equal()?{
resultSet.setText(""◆resultNum);
operator="";
void?doOperation()?{
double?m=Double.parseDouble(resultSet.getText());
if(operator.equals("")){
resultNum=m;
if(operator.equals("◆")){
resultNum◆=m;
if(operator.equals("-")){
resultNum-=m;
if(operator.equals("*")){
resultNum*=m;
if(operator.equals("/")){
resultNum/=m;
void?Clear()?{??//清零
resultSet.setText("0");
void?backspace()?{?//退格
String?text?=resultSet.getText();
if?(text.length()0){
resultSet.setText(text.substring(0,?text.length()-1));//将文本最后一个字符删除
else?if?(text.length()==0){
学java的时候自己编的,很简单,能够连续输入计算式后进行计算
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.text.NumberFormat;
import java.util.ArrayList;
/**简易计算器,能够进行简单的计算
public class CalculatorA
implements ActionListener{
private JFrame frame;
private JTextField field;
private JButton[] allButtons;
private JButton clearButton;
// private JButton backButton;
String result="";//保存结果
StringBuilder sb = new StringBuilder();//保存要进行的计算式
int x = 0; //用来判断上一次的事件类型
ArrayListString arrayList = new ArrayListString();//保存计算式,通过方法进行运算
public CalculatorA(){
frame = new JFrame("我的计算器v1.1");
for(int i=0;iallButtons.length;i◆◆){
allButtons[i]= new JButton(str.substring(i,i◆1));
clearButton = new JButton("CLEAR");
// backButton = new JButton("——");
init();
setFondAndColor();
addEventHander();
public void init(){
frame.setLayout(new BorderLayout());
JPanel northPanel = new JPanel();
JPanel centerPanel = new JPanel();
JPanel southPanel = new JPanel();
northPanel.setLayout(new FlowLayout());
southPanel.setLayout(new FlowLayout());
northPanel.add(field);
centerPanel.add(allButtons[i]);
southPanel.add(clearButton);
//southPanel.add(backButton);
frame.add(northPanel,BorderLayout.NORTH);
frame.add(centerPanel,BorderLayout.CENTER);
frame.add(southPanel,BorderLayout.SOUTH);
//设置输入字体
public void setFondAndColor(){
field.setForeground(Color.RED);
//设置字体从右起始
field.setHorizontalAlignment(JTextField.RIGHT);
public void showMi(){
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
public void addEventHander(){
allButtons[i].addActionListener(this);
clearButton.addActionListener(this);
// backButton.addActionListener(this);
String str = e.getActionCommand();//取得当前事件返回的值
if(x == 0){ //当x为0时表示还没有进行输入
result=str;
sb.append(str);
field.setText(str);
x = 1;
else if(x == 1){
result = result ◆str;
field.setText(result);
sb.delete(0,sb.length());
result = result◆str;
result = str;
arrayList.clear();
result ="";
else{
else if("◆*-/".indexOf(str)!=-1){
if(x == 0){
field.setText("");
result = result ◆ str;
arrayList.add(sb.toString());
arrayList.add(str);
field.setText(result◆str);
arrayList.add(result);
else if("=".equals(str)){
field.setText("0");
result = "0";
try{
arrayList = getResult(arrayList);
result = arrayList.get(0);
}catch(Exception e1){
field.setText("数据格式异常");
x = 0;
field.setText("数据格式错误.....");
else {
else if("CLEAR".equals(str)){
arrayList.add("0");
if(result.length()1){
result = result.substring(0,result.length()-1);
if(sb.length()0){
sb.delete(sb.length()-1,sb.length());
sb.delete(0,1);
result = "";
public static ArrayListString getResult(ArrayListString list){
String res = null;
String[] s = {"/","*","-","◆"};
int i=0;
if(list.size()1){
for(;is.length;){
if(s[i].equals("/")){
for(int j=0;jlist.size();j◆◆){
if(list.get(j).equals(s[i])){
res = Double.toString(Double.parseDouble(list.get(j-1))/Double.parseDouble(list.get(j◆1)));
//本地的数据格式
NumberFormat nf = NumberFormat.getInstance();
res = nf.format(Double.parseDouble(res));
res = getChange(res);
list.set(j-1,res);
list.remove(j);
getResult(list);
i◆◆;
else if(s[i].equals("*")){
res = Double.toString(Double.parseDouble(list.get(j-1))*Double.parseDouble(list.get(j◆1)));
else if(s[i].equals("-")){
res = Double.toString(Double.parseDouble(list.get(j-1))-Double.parseDouble(list.get(j◆1)));
NumberFormat nf = NumberFormat.getNumberInstance();
res = Double.toString(Double.parseDouble(list.get(j-1))◆Double.parseDouble(list.get(j◆1)));
return list;
//对数字字符串进行排除不必要符号
public static String getChange(String res){
String s_temp = "";
char[] c = new char[res.length()];
for(int k=0;kc.length;k◆◆){
c[k] = res.charAt(k);
s_temp ◆= c[k];
return s_temp;
public static void main(String[] args){
new CalculatorA().showMi();
以上就是土嘎嘎小编为大家整理的java全面的计算器代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!