用java设计一个计算器 1.可以没有界面,但要有输入和输出 2.整数,小数,加减乘除,求余,括号

用java设计一个计算器 1.可以没有界面,但要有输入和输出 2.整数,小数,加减乘除,求余,括号,第1张

package comelectricautoworkcontroller;

import javaawtBorderLayout;

import javaawtColor;

import javaawtGridLayout;

import javaawteventActionEvent;

import javaawteventActionListener;

import javaxswingJButton;

import javaxswingJFrame;

import javaxswingJPanel;

import javaxswingJTextField;

/

一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。 但还不支持键盘 *** 作。

/

public class jisuanqi extends JFrame implements ActionListener {

/ 计算器上的键的显示名字 /

private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",

"", "%", "1", "2", "3", "-", "1/x", "0", "+/-", "", "+", "=" };

/ 计算器上的功能键的显示名字 /

private final String[] COMMAND = { "Backspace", "CE", "C" };

/ 计算器左边的M的显示名字 /

private final String[] M = { " ", "MC", "MR", "MS", "M+" };

/ 计算器上键的按钮 /

private JButton keys[] = new JButton[KEYSlength];

/ 计算器上的功能键的按钮 /

private JButton commands[] = new JButton[COMMANDlength];

/ 计算器左边的M的按钮 /

private JButton m[] = new JButton[Mlength];

/ 计算结果文本框 /

private JTextField resultText = new JTextField("0");

// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字

private boolean firstDigit = true;

// 计算的中间结果。

private double resultNum = 00;

// 当前运算的运算符

private String operator = "=";

// *** 作是否合法

private boolean operateValidFlag = true;

/

构造函数

/

public jisuanqi() {

super();

// 初始化计算器

init();

// 设置计算器的背景颜色

thissetBackground(ColorLIGHT_GRAY);

thissetTitle("计算器");

// 在屏幕(500, 300)坐标处显示计算器

thissetLocation(500, 300);

// 不许修改计算器的大小

thissetResizable(false);

// 使计算器中各组件大小合适

thispack();

}

/

初始化计算器

/

private void init() {

// 文本框中的内容采用右对齐方式

resultTextsetHorizontalAlignment(JTextFieldRIGHT);

// 不允许修改结果文本框

resultTextsetEditable(false);

// 设置文本框背景颜色为白色

resultTextsetBackground(Colorwhite);

// 初始化计算器上键的按钮,将键放在一个画板

JPanel calckeysPanel = new JPanel();

// 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

calckeysPanelsetLayout(new GridLayout(4, 5, 3, 3));

for (int i = 0; i < KEYSlength; i++) {

keys[i] = new JButton(KEYS[i]);

calckeysPaneladd(keys[i]);

keys[i]setForeground(Colorblue);

}

// 运算符键用红色标示,其他键用蓝色表示

keys[3]setForeground(Colorred);

keys[8]setForeground(Colorred);

keys[13]setForeground(Colorred);

keys[18]setForeground(Colorred);

keys[19]setForeground(Colorred);

// 初始化功能键,都用红色标示。将功能键放在一个画板内

JPanel commandsPanel = new JPanel();

// 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

commandsPanelsetLayout(new GridLayout(1, 3, 3, 3));

for (int i = 0; i < COMMANDlength; i++) {

commands[i] = new JButton(COMMAND[i]);

commandsPaneladd(commands[i]);

commands[i]setForeground(Colorred);

}

// 初始化M键,用红色标示,将M键放在一个画板内

JPanel calmsPanel = new JPanel();

// 用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

calmsPanelsetLayout(new GridLayout(5, 1, 3, 3));

for (int i = 0; i < Mlength; i++) {

m[i] = new JButton(M[i]);

calmsPaneladd(m[i]);

m[i]setForeground(Colorred);

}

// 下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,

// 将文本框放在北部,将calms画板放在计算器的西部。

// 新建一个大的画板,将上面建立的command和calckeys画板放在该画板内

JPanel panel1 = new JPanel();

// 画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素

panel1setLayout(new BorderLayout(3, 3));

panel1add("North", commandsPanel);

panel1add("West", calckeysPanel);

// 建立一个画板放文本框

JPanel top = new JPanel();

topsetLayout(new BorderLayout());

topadd("Center", resultText);

// 整体布局

getContentPane()setLayout(new BorderLayout(3, 5));

getContentPane()add("North", top);

getContentPane()add("Center", panel1);

getContentPane()add("West", calmsPanel);

// 为各按钮添加事件侦听器

// 都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener

for (int i = 0; i < KEYSlength; i++) {

keys[i]addActionListener(this);

}

for (int i = 0; i < COMMANDlength; i++) {

commands[i]addActionListener(this);

}

for (int i = 0; i < Mlength; i++) {

m[i]addActionListener(this);

}

}

/

处理事件

/

public void actionPerformed(ActionEvent e) {

// 获取事件源的标签

String label = egetActionCommand();

if (labelequals(COMMAND[0])) {

// 用户按了"Backspace"键

handleBackspace();

} else if (labelequals(COMMAND[1])) {

// 用户按了"CE"键

resultTextsetText("0");

} else if (labelequals(COMMAND[2])) {

// 用户按了"C"键

handleC();

} else if ("0123456789"indexOf(label) >= 0) {

// 用户按了数字键或者小数点键

handleNumber(label);

// handlezero(zero);

} else {

// 用户按了运算符键

handleOperator(label);

}

}

/

处理Backspace键被按下的事件

/

private void handleBackspace() {

String text = resultTextgetText();

int i = textlength();

if (i > 0) {

// 退格,将文本最后一个字符去掉

text = textsubstring(0, i - 1);

if (textlength() == 0) {

// 如果文本没有了内容,则初始化计算器的各种值

resultTextsetText("0");

firstDigit = true;

operator = "=";

} else {

// 显示新的文本

resultTextsetText(text);

}

}

}

/

处理数字键被按下的事件

@param key

/

private void handleNumber(String key) {

if (firstDigit) {

// 输入的第一个数字

resultTextsetText(key);

} else if ((keyequals("")) && (resultTextgetText()indexOf("") < 0)) {

// 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面

resultTextsetText(resultTextgetText() + "");

} else if (!keyequals("")) {

// 如果输入的不是小数点,则将数字附在结果文本框的后面

resultTextsetText(resultTextgetText() + key);

}

// 以后输入的肯定不是第一个数字了

firstDigit = false;

}

/

处理C键被按下的事件

/

private void handleC() {

// 初始化计算器的各种值

resultTextsetText("0");

firstDigit = true;

operator = "=";

}

/

处理运算符键被按下的事件

@param key

/

private void handleOperator(String key) {

if (operatorequals("/")) {

// 除法运算

// 如果当前结果文本框中的值等于0

if (getNumberFromText() == 00) {

// *** 作不合法

operateValidFlag = false;

resultTextsetText("除数不能为零");

} else {

resultNum /= getNumberFromText();

}

} else if (operatorequals("1/x")) {

// 倒数运算

if (resultNum == 00) {

// *** 作不合法

operateValidFlag = false;

resultTextsetText("零没有倒数");

} else {

resultNum = 1 / resultNum;

}

} else if (operatorequals("+")) {

// 加法运算

resultNum += getNumberFromText();

} else if (operatorequals("-")) {

// 减法运算

resultNum -= getNumberFromText();

} else if (operatorequals("")) {

// 乘法运算

resultNum = getNumberFromText();

} else if (operatorequals("sqrt")) {

// 平方根运算

resultNum = Mathsqrt(resultNum);

} else if (operatorequals("%")) {

// 百分号运算,除以100

resultNum = resultNum / 100;

} else if (operatorequals("+/-")) {

// 正数负数运算

resultNum = resultNum (-1);

} else if (operatorequals("=")) {

// 赋值运算

resultNum = getNumberFromText();

}

if (operateValidFlag) {

// 双精度浮点数的运算

long t1;

double t2;

t1 = (long) resultNum;

t2 = resultNum - t1;

if (t2 == 0) {

resultTextsetText(StringvalueOf(t1));

} else {

resultTextsetText(StringvalueOf(resultNum));

}

}

// 运算符等于用户按的按钮

operator = key;

firstDigit = true;//这个地方太tm巧妙了想好几天, 先进行上一次 *** 作,再将本次 *** 作(最后一次 *** 作)赋给 *** 作,所以每次 *** 作前都先进行上一次 *** 作,默认 *** 作为"=" 挺nb

operateValidFlag = true;

}

/

从结果文本框中获取数字

@return

/

private double getNumberFromText() {

double result = 0;

try {

result = DoublevalueOf(resultTextgetText())doubleValue(); //显示文字后不会蹦出

} catch (NumberFormatException e) {

}

return result;

}

public static void main(String args[]) {

jisuanqi calculator1 = new jisuanqi();

calculator1setVisible(true);

calculator1setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

}

========================================================

代码比较多,放在任何一个项目里都行,新建一个叫做 jisuanqi 的java文件,粘贴进去就行,会有一个错误是包位置的选择,点击错误选择正确的包位置就可以了, 无错误后执行文件最下面的main函数,就会出现计算器。有不懂的可以继续问,望采纳~!

给个你参考:

import javaawt;

import javaawtevent;

import javautilCalendar;

import javautilDate;

import javaxswing;

public class MyCalculator implements Runnable, ActionListener

{

JFrame f;

JMenu mEdit;

JMenu mView;

JMenuItem mCopy;

JMenuItem mPaste;

JTextField tResult;

JTextField text;

JButton bNumber;

JButton bOperator;

JButton bOther;

JButton bM;

JTextField time,date1;

Thread datimeThread;

JPanel pstatusbar;

JLabel labwelcome;

boolean isDouble=false;//是否为实数

int opFlag=-1;

static double t1=0,t2=0,t3=0,result=0;

static int opflag1=-1,opflag2=-1,flag=0,resflag=1;

int preOp,currentOp=0;//标准位

double op1=0,op2=0;// *** 作数

double n3;

StringBuffer buf=new StringBuffer(20);

StringBuffer copyBoard=new StringBuffer(20);//剪贴板

StringBuffer memory = new StringBuffer(20);//M系列

StringBuffer str = new StringBuffer();

public MyCalculator()

{

f = new JFrame("新世纪计算器");

Container contentPane = fgetContentPane();

/菜单的创建开始/

JMenuBar mBar = new JMenuBar();

mBarsetOpaque(true);

mEdit = new JMenu("编辑(E)");

mEditsetMnemonic(KeyEventVK_E);

mCopy = new JMenuItem("复制(C)");

mEditadd(mCopy);

mPaste = new JMenuItem("粘贴(P)");

mEditadd(mPaste);

mView = new JMenu("查看(V)");

mViewsetMnemonic(KeyEventVK_V);

mViewadd(new JMenuItem("标准型"));

mViewadd(new JMenuItem("科学型"));

mViewaddSeparator();

mViewadd(new JMenuItem("查看分组"));

mBaradd(mEdit);

mBaradd(mView);

fsetJMenuBar(mBar);

contentPanesetLayout(new BorderLayout());

JPanel pTop = new JPanel();

tResult = new JTextField("0",26);

tResultsetHorizontalAlignment(JTextFieldRIGHT );

tResultsetEditable(false);

pTopadd(tResult);

text = new JTextField();

textsetHorizontalAlignment(JTextFieldLEFT );

contentPaneadd(pTop,BorderLayoutNORTH);

JPanel pBottom = new JPanel();

pBottomsetLayout(new BorderLayout());

JPanel pLeft = new JPanel();

pLeftsetLayout(new GridLayout(5,1,3,3));

bM = new JButton(" ");

bMsetEnabled(false);

pLeftadd(bM);

bOther = new JButton("MC");

bOtheraddActionListener(this);

bOthersetForeground(Colorblue);

bOthersetMargin(new Insets(3,2,3,2));

pLeftadd(bOther);

bOther = new JButton("MR");

bOtheraddActionListener(this);

bOthersetForeground(Colorblue);

bOthersetMargin(new Insets(3,2,3,2));

pLeftadd(bOther);

bOther = new JButton("MS");

bOtheraddActionListener(this);

bOthersetForeground(Colorblue);

bOthersetMargin(new Insets(3,2,3,2));

pLeftadd(bOther);

bOther = new JButton("M+");

bOtheraddActionListener(this);

bOthersetForeground(Colorblue);

bOthersetMargin(new Insets(3,2,3,2));

pLeftadd(bOther);

pBottomadd(pLeft,BorderLayoutWEST);

JPanel pRight = new JPanel();

pRightsetLayout(new BorderLayout());

JPanel pUp = new JPanel();

pUpsetLayout(new GridLayout(1,3,3,0));

bOther = new JButton("Backspace");

bOtheraddActionListener(this);

bOthersetForeground(Colorblue);

bOthersetMargin(new Insets(3,0,3,5));

pUpadd(bOther);

bOther = new JButton("CE");

bOtheraddActionListener(this);

bOthersetForeground(Colorblue);

pUpadd(bOther);

bOther = new JButton("C");

bOtheraddActionListener(this);

bOthersetForeground(Colorblue);

pUpadd(bOther);

JPanel pDown = new JPanel();

pDownsetLayout(new GridLayout(4,5,3,2));

bNumber = new JButton("7");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bNumber = new JButton("8");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bNumber = new JButton("9");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bOperator = new JButton("/");

bOperatorsetForeground(Colorblue);

bOperatoraddActionListener(this);

bOperatorsetMargin(new Insets(3,0,3,0));

pDownadd(bOperator);

bOperator = new JButton("sqrt");

bOperatoraddActionListener(this);

bOperatorsetForeground(Colorred);

bOperatorsetMargin(new Insets(3,0,3,0));

pDownadd(bOperator);

bNumber = new JButton("4");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

bNumbersetHorizontalTextPosition(JButtonLEFT);

pDownadd(bNumber);

bNumber = new JButton("5");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bNumber = new JButton("6");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bOperator = new JButton("");

bOperatorsetForeground(Colorblue);

bOperatoraddActionListener(this);

bOperatorsetMargin(new Insets(3,3,3,3));

pDownadd(bOperator);

bOperator = new JButton("%");

bOperatorsetForeground(Colorred);

bOperatoraddActionListener(this);

bOperatorsetMargin(new Insets(3,3,3,3));

pDownadd(bOperator);

bNumber = new JButton("1");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bNumber = new JButton("2");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bNumber = new JButton("3");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bOperator = new JButton("-");

bOperatorsetForeground(Colorblue);

bOperatoraddActionListener(this);

bOperatorsetMargin(new Insets(3,3,3,3));

pDownadd(bOperator);

bOperator = new JButton("1/x");

bOperatorsetForeground(Colorred);

bOperatoraddActionListener(this);

pDownadd(bOperator);

bNumber = new JButton("0");

bNumbersetForeground(Colorred);

bNumberaddActionListener(this);

bNumbersetMargin(new Insets(3,3,3,3));

pDownadd(bNumber);

bOperator = new JButton("+/-");

bOperatorsetForeground(Colorred);

bOperatoraddActionListener(this);

bOperatorsetMargin(new Insets(3,3,3,3));

pDownadd(bOperator);

bOperator = new JButton("");

bOperatorsetForeground(Colorred);

bOperatoraddActionListener(this);

bOperatorsetMargin(new Insets(3,3,3,3));

pDownadd(bOperator);

bOperator = new JButton("+");

bOperatorsetForeground(Colorblue);

bOperatoraddActionListener(this);

bOperatorsetMargin(new Insets(3,3,3,3));

pDownadd(bOperator);

bOperator = new JButton("=");

bOperatorsetForeground(Colorred);

bOperatoraddActionListener(this);

bOperatorsetMargin(new Insets(3,3,3,3));

pDownadd(bOperator);

pRightadd(pUp,BorderLayoutNORTH);

pRightadd(pDown,BorderLayoutSOUTH);

pBottomadd(pRight,BorderLayoutEAST);

contentPaneadd(pBottom,BorderLayoutCENTER);

//创建状态栏

labwelcome=new JLabel("Welcome!");

pstatusbar=new JPanel();

pstatusbarsetPreferredSize(new Dimension(320,30));

time=new JTextField(10);//设置时间

timesetEditable(false);

date1=new JTextField(10);//设置日期

date1setEditable(false);

pstatusbaradd(labwelcome);

pstatusbaradd(date1);

pstatusbaradd(time);

datimeThread=new Thread(this);

datimeThreadstart();

contentPaneadd(pstatusbar,BorderLayoutSOUTH);

fsetSize(new Dimension(320,280));

fsetResizable(false);

fsetVisible(true);

faddWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

Systemexit(0);

}

}

);

}

public void actionPerformed(ActionEvent e)

{

String s=egetActionCommand();

if(sequals("复制(C)"))

{

String temp=tResultgetText()trim();

copyBoardreplace(0,copyBoardlength(),temp);

mPastesetEnabled(true);

}

else if(sequals("粘贴(P)"))

{

tResultsetText(copyBoardtoString());

}

else if(sequals("CE"))

{

//如果是CE则清除文本框 还要将存放结果的内容去除

strdelete(0, strlength());

tResultsetText("0");

}

else if(sequals("Backspace"))

{//如果是backspace则删除一个字符。

if(!tResultgetText()trim()equals("0"))

{ //如果文本框中有内容

if(strlength()!=1&&strlength()!=0)

{

tResultsetText(strdelete(strlength()-1,strlength())toString());

}else {

tResultsetText("0");

strsetLength(0);

}

}

op2=DoubleparseDouble(tResultgetText()trim());

}

else if(sequals("C"))

{//如果是C删除当前计算。

tResultsetText("0");

op1=op2=0;

strreplace(0,strlength()," ");

preOp=currentOp=0;

}

else if(sequals("MC"))

{ //如果是MC则清除缓冲区

String temp="";

memoryreplace(0,memorylength(),temp);

bMsetText(" ");

}

else if(sequals("MR"))

{ //如果按键为MR则恢复缓冲区的数到文本框

tResultsetText(memorytoString());

}

else if(sequals("MS"))

{//如果按键为MS则将文本框的数存入缓冲区

String s1=tResultgetText()trim();

memoryreplace(0,memorylength(),s1);

bMsetText("M");

}

else if(sequals("M+"))

{ //如果按键为MS则将文本框值与缓冲区的数相加但不显示结果。

String temp1=tResultgetText()trim();

double dtemp=DoubleparseDouble(temp1);

String temp2=memorytoString();

dtemp+=DoubleparseDouble(temp2);

temp1=StringvalueOf(dtemp);

memoryreplace(0,memorylength(),temp1);

}

else if(sequals("1/x"))

{//如果按键为1/x则将文本框中的数据置为它的倒数。

String temp=tResultgetText()trim();

double dtemp=DoubleparseDouble(temp);

tResultsetText(""+1/dtemp);

}

else if(sequals("+/-"))

{//如果按键为+/-则将文本框中的数据置为它的相反数。

String temp=tResultgetText()trim();

double dtemp=DoubleparseDouble(temp);

dtemp=(-1)dtemp;

tResultsetText(""+dtemp);

}

else if(sequals("%"))

{

String temp=tResultgetText()trim();

double dtemp=DoubleparseDouble(temp);

tResultsetText(""+dtemp);

}

else if(sequals("sqrt"))

{ //如果按键为sqrt则将文本框中的内容求平方根

String temp=tResultgetText()trim();

double dtemp=DoubleparseDouble(temp);

tResultsetText(""+Mathsqrt(dtemp));

}

else if(sequals("+"))//+

{

strsetLength(0);

if(currentOp==0)

{

preOp=currentOp=1;//op1=0;

op2=0;

tResultsetText(""+op1);

}else {

currentOp =preOp;

preOp =1;

switch(currentOp){

case 1:op1=op1+op2;tResultsetText(""+op1);break;

case 2:op1=op1-op2;tResultsetText(""+op1);break;

case 3:op1=op1op2;tResultsetText(""+op1);break;

case 4:op1=op1/op2;tResultsetText(""+op1);break;

}

}

}

else if(sequals("-"))//-

{

strsetLength(0);

if(currentOp==0)

{

preOp=currentOp=2;//op1=op2;op2=0;

tResultsetText(""+op1);

}

else

{

currentOp =preOp;

preOp =2;

switch(currentOp){

case 1:op1=op1+op2;tResultsetText(""+op1);break;

case 2:op1=op1-op2;tResultsetText(""+op1);break;

case 3:op1=op1op2;tResultsetText(""+op1);break;

case 4:op1=op1/op2;tResultsetText(""+op1);break;

}

}

}

else if(sequals(""))//

{

strsetLength(0);

if(currentOp==0)

{

preOp=currentOp=3;//op1=op2;op2=1;

tResultsetText(""+op1);//op1=op2;

}

else

{

currentOp =preOp;

preOp =3;

switch(currentOp){

case 1:op1=op1+op2;tResultsetText(""+op1);break;

case 2:op1=op1-op2;tResultsetText(""+op1);break;

case 3:op1=op1op2;tResultsetText(""+op1);break;

case 4:op1=op1/op2;tResultsetText(""+op1);break;

}

}

}

else if(sequals("/"))// /

{

strsetLength(0);

if(currentOp==0)

{

preOp=currentOp=4;//op2=1;

tResultsetText(""+op1);//op1=op2;

}

else

{

currentOp =preOp;

preOp =4;

switch(currentOp){

case 1:op1=op1+op2;tResultsetText(""+op1);break;

case 2:op1=op1-op2;tResultsetText(""+op1);break;

case 3:op1=op1op2;tResultsetText(""+op1);break;

case 4:op1=op1/op2;tResultsetText(""+op1);break;

}

}

}

else if(sequals("="))// =

{

if(currentOp==0)

{

strsetLength(0);

tResultsetText(""+op2);

}

else

{

strsetLength(0);

currentOp =preOp;

switch(currentOp){

case 1:op1=op1+op2;tResultsetText(""+op1);break;

case 2:op1=op1-op2;tResultsetText(""+op1);break;

case 3:op1=op1op2;tResultsetText(""+op1);break;

case 4:op1=op1/op2;tResultsetText(""+op1);break;

}

currentOp=0;

op2=0;

}

}

else if(sequals(""))

{

isDouble=true;

if(tResultgetText()trim()indexOf('')!=-1);

else

{

if(tResultgetText()trim()equals("0"))

{

strsetLength(0);

tResultsetText((strappend("0"+s))toString());

}

//else if(tResultgetText()trim()equals("")){}//如果初时显示为空则不做任何 *** 作

else

{

tResultsetText((strappend(s))toString());

}

}

}

else if(sequals("0"))//如果选择的是"0"这个数字键

{

if(tResultgetText()trim()equals("0")){}

else

{

tResultsetText(strappend(s)toString());

op2=DoubleparseDouble(tResultgetText()trim());

}

}

else

{

tResultsetText(strappend(s)toString());

op2=DoubleparseDouble(tResultgetText()trim());

if(currentOp==0)

op1=op2;

}

}//end actionPerformed

public void run()

{

while(datimeThread!=null)

{

display();

try

{

datimeThreadsleep(1000);

}

catch(InterruptedException e)

{}

}

}

public void display()

{

Calendar calendar=CalendargetInstance();

calendarsetTime(new Date());

String strDate=calendarget(CalendarYEAR)+"/"+calendarget(CalendarMONTH)+"/"+calendarget(CalendarDAY_OF_MONTH)+" 星期"+(calendarget(CalendarDAY_OF_WEEK)-1);

String strTime=calendarget(CalendarHOUR_OF_DAY)+":"+calendarget(CalendarMINUTE)+":"+calendarget(CalendarSECOND);

timesetText(strTime);

date1setText(strDate);

}

public static void main(String[] args)

{

new MyCalculator();

}

}

public class Counter extends JFrame implements ActionListener{

/

Comment for <code>serialVersionUID</code>

/

private static final long serialVersionUID = -1379168350413982454L;

TextField num1;

TextField num2;

TextField result;

JButton clear;

JButton plus;

JTextArea j1;

JTextArea j2;

JButton aa;

public Counter(){

num1 = new TextField(5);//定义加数1

num2 = new TextField(5);//定义加数2

result = new TextField(5);//定义结果

plus=new JButton("加");//定义加法按钮

clear = new JButton("清空");//定义清空按钮

j1 = new JTextArea("+");//定义符号 +

j2 = new JTextArea("=");//定义符号 =

j1setEditable(false);//定义属性只读

j2setEditable(false);//定义加数1

resultsetEditable(false);//定义加数1

aa = new JButton("隐藏");

thisadd(num1);

thisadd(j1);

thisadd(num2);

thisadd(j2);

thisadd(result);

thisadd(plus);

thisadd(clear);

thisadd(aa);

thissetLayout(new FlowLayout());

thissetBackground(Colorwhite);

thissetVisible(true);

thissetSize(500,200);

thissetTitle("计算器");

thissetLocationRelativeTo(null);//窗口初始位置在中间

plusaddActionListener(this);

clearaddActionListener(this);

aaaddActionListener(this);

thisaddWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

Systemexit(0);

}

});

}

public void actionPerformed(ActionEvent e){

if (egetSource()==clear){//点击清空按钮

num1setText("");

num2setText("");

resultsetText("");

}else if(egetSource()==plus){//点击“加”按钮

resultsetText(IntegerparseInt(num1getText())+IntegerparseInt(num2getText())+"");

}else if(egetSource()==aa){

aasetVisible(false);

}

}

public static void main(String[] args) {

new Counter();

}

/

判断输入的是否是数字

@param str

@return

/

public static boolean isInt(String str){

try {

IntegerparseInt(str);

} catch (Exception e) {

return false;

}

return true;

}

}

package bookgui;

import javaawtBorderLayout;

import javaawtColor;

import javaawtGridLayout;

import javaawteventActionEvent;

import javaawteventActionListener;

import javaxswingJButton;

import javaxswingJFrame;

import javaxswingJPanel;

import javaxswingJTextField;

/

一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。

但还不支持键盘 *** 作。

/

public class Calculator extends JFrame implements ActionListener {

/ 计算器上的键的显示名字 /

private final String[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",

"", "%", "1", "2", "3", "-", "1/x", "0", "+/-", "", "+", "=" };

/ 计算器上的功能键的显示名字 /

private final String[] COMMAND = { "Backspace", "CE", "C" };

/ 计算器左边的M的显示名字 /

private final String[] M = { " ", "MC", "MR", "MS", "M+" };

/ 计算器上键的按钮 /

private JButton keys[] = new JButton[KEYSlength];

/ 计算器上的功能键的按钮 /

private JButton commands[] = new JButton[COMMANDlength];

/ 计算器左边的M的按钮 /

private JButton m[] = new JButton[Mlength];

/ 计算结果文本框 /

private JTextField resultText = new JTextField("0");

// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字

private boolean firstDigit = true;

// 计算的中间结果。

private double resultNum = 00;

// 当前运算的运算符

private String operator = "=";

// *** 作是否合法

private boolean operateValidFlag = true;

/

构造函数

/

public Calculator(){

super();

//初始化计算器

init();

//设置计算器的背景颜色

thissetBackground(ColorLIGHT_GRAY);

thissetTitle("计算器");

//在屏幕(500, 300)坐标处显示计算器

thissetLocation(500, 300);

//不许修改计算器的大小

thissetResizable(false);

//使计算器中各组件大小合适

thispack();

}

/

初始化计算器

/

private void init() {

// 文本框中的内容采用右对齐方式

resultTextsetHorizontalAlignment(JTextFieldRIGHT);

// 不允许修改结果文本框

resultTextsetEditable(false);

// 设置文本框背景颜色为白色

resultTextsetBackground(ColorWHITE);

//初始化计算器上键的按钮,将键放在一个画板内

JPanel calckeysPanel = new JPanel();

//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

calckeysPanelsetLayout(new GridLayout(4, 5, 3, 3));

for (int i = 0; i < KEYSlength; i++) {

keys[i] = new JButton(KEYS[i]);

calckeysPaneladd(keys[i]);

keys[i]setForeground(Colorblue);

}

//运算符键用红色标示,其他键用蓝色表示

keys[3]setForeground(Colorred);

keys[8]setForeground(Colorred);

keys[13]setForeground(Colorred);

keys[18]setForeground(Colorred);

keys[19]setForeground(Colorred);

//初始化功能键,都用红色标示。将功能键放在一个画板内

JPanel commandsPanel = new JPanel();

//用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

commandsPanelsetLayout(new GridLayout(1, 3, 3, 3));

for (int i = 0; i < COMMANDlength; i++) {

commands[i] = new JButton(COMMAND[i]);

commandsPaneladd(commands[i]);

commands[i]setForeground(Colorred);

}

//初始化M键,用红色标示,将M键放在一个画板内

JPanel calmsPanel = new JPanel();

//用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素

calmsPanelsetLayout(new GridLayout(5, 1, 3, 3));

for (int i = 0; i < Mlength; i++) {

m[i] = new JButton(M[i]);

calmsPaneladd(m[i]);

m[i]setForeground(Colorred);

}

//下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,

//将文本框放在北部,将calms画板放在计算器的西部。

//新建一个大的画板,将上面建立的command和calckeys画板放在该画板内

JPanel panel1 = new JPanel();

//画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素

panel1setLayout(new BorderLayout(3, 3));

panel1add("North", commandsPanel);

panel1add("Center", calckeysPanel);

//建立一个画板放文本框

JPanel top = new JPanel();

topsetLayout(new BorderLayout());

topadd("Center", resultText);

//整体布局

getContentPane()setLayout(new BorderLayout(3, 5));

getContentPane()add("North", top);

getContentPane()add("Center", panel1);

getContentPane()add("West", calmsPanel);

//为各按钮添加事件侦听器

//都使用同一个事件侦听器,即本对象。本类的声明中有implements ActionListener

for (int i = 0; i < KEYSlength; i++) {

keys[i]addActionListener(this);

}

for (int i = 0; i < COMMANDlength; i++) {

commands[i]addActionListener(this);

}

for (int i = 0; i < Mlength; i++) {

m[i]addActionListener(this);

}

}

/

处理事件

/

public void actionPerformed(ActionEvent e) {

//获取事件源的标签

String label = egetActionCommand();

if (labelequals(COMMAND[0])){

//用户按了"Backspace"键

handleBackspace();

} else if (labelequals(COMMAND[1])) {

//用户按了"CE"键

resultTextsetText("0");

} else if (labelequals(COMMAND[2])){

//用户按了"C"键

handleC();

} else if ("0123456789"indexOf(label) >= 0) {

//用户按了数字键或者小数点键

handleNumber(label);

// handlezero(zero);

} else {

//用户按了运算符键

handleOperator(label);

}

}

/

处理Backspace键被按下的事件

/

private void handleBackspace() {

String text = resultTextgetText();

int i = textlength();

if (i > 0) {

//退格,将文本最后一个字符去掉

text = textsubstring(0, i - 1);

if (textlength() == 0) {

//如果文本没有了内容,则初始化计算器的各种值

resultTextsetText("0");

firstDigit = true;

operator = "=";

} else {

//显示新的文本

resultTextsetText(text);

}

}

}

/

处理数字键被按下的事件

@param key

/

private void handleNumber(String key) {

if (firstDigit) {

//输入的第一个数字

resultTextsetText(key);

} else if ((keyequals("")) && (resultTextgetText()indexOf("") < 0)){

//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面

resultTextsetText(resultTextgetText() + "");

} else if (!keyequals("")) {

//如果输入的不是小数点,则将数字附在结果文本框的后面

resultTextsetText(resultTextgetText() + key);

}

//以后输入的肯定不是第一个数字了

firstDigit = false;

}

/

处理C键被按下的事件

/

private void handleC() {

//初始化计算器的各种值

resultTextsetText("0");

firstDigit = true;

operator = "=";

}

/

处理运算符键被按下的事件

@param key

/

private void handleOperator(String key) {

if (operatorequals("/")) {

//除法运算

//如果当前结果文本框中的值等于0

if (getNumberFromText() == 00){

// *** 作不合法

operateValidFlag = false;

resultTextsetText("除数不能为零");

} else {

resultNum /= getNumberFromText();

}

} else if (operatorequals("1/x")) {

//倒数运算

if (resultNum == 00){

// *** 作不合法

operateValidFlag = false;

resultTextsetText("零没有倒数");

} else {

resultNum = 1 / resultNum;

}

} else if (operatorequals("+")){

//加法运算

resultNum += getNumberFromText();

} else if (operatorequals("-")){

//减法运算

resultNum -= getNumberFromText();

} else if (operatorequals("")){

//乘法运算

resultNum = getNumberFromText();

} else if (operatorequals("sqrt")) {

//平方根运算

resultNum = Mathsqrt(resultNum);

} else if (operatorequals("%")){

//百分号运算,除以100

resultNum = resultNum / 100;

} else if (operatorequals("+/-")){

//正数负数运算

resultNum = resultNum (-1);

} else if (operatorequals("=")){

//赋值运算

resultNum = getNumberFromText();

}

if (operateValidFlag) {

//双精度浮点数的运算

long t1;

double t2;

t1 = (long) resultNum;

t2 = resultNum - t1;

if (t2 == 0) {

resultTextsetText(StringvalueOf(t1));

} else {

resultTextsetText(StringvalueOf(resultNum));

}

}

//运算符等于用户按的按钮

operator = key;

firstDigit = true;

operateValidFlag = true;

}

/

从结果文本框中获取数字

@return

/

private double getNumberFromText() {

double result = 0;

try {

result = DoublevalueOf(resultTextgetText())doubleValue();

} catch (NumberFormatException e){

}

return result;

}

public static void main(String args[]) {

Calculator calculator1 = new Calculator();

calculator1setVisible(true);

calculator1setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

}

package bookgui;

import javaxswingJFrame;

import javaxswingSwingUtilities;

import javaxswingUIManager;

import javaxswingUnsupportedLookAndFeelException;

import javaxswingplafmetalMetalLookAndFeel;

import comsunjavaswingplafmotifMotifLookAndFeel;

import comsunjavaswingplafwindowsWindowsLookAndFeel;

/

更改窗体、组件的外观

/

public class LookAndFeel {

public static void main(String[] args) {

/

Metal风格——"javaxswingplafmetalMetalLookAndFeel"

Motif风格——"comsunjavaswingplafmotifMotifLookAndFeel"

Windows风格——"comsunjavaswingplafwindowsWindowsLookAndFeel"

/

Calculator calculator1 = new Calculator();

calculator1setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

//3个不同的风格

/

LookAndFeel是一个抽象类,除了提供了一些static方法,还定义了一些抽象的个性化设置方法来由子类实现。

从JDK113开始,Sun提供了三个LookAndFeel的子类

/

String lnfName = "javaxswingplafmetalMetalLookAndFeel";

// String lnfName = "comsunjavaswingplafmotifMotifLookAndFeel";

// String lnfName = "comsunjavaswingplafwindowsWindowsLookAndFeel";

try {

// UIManager负责跟踪当前的外观及其默认设置,setLookAndFeel方法将设置它的LookAndFeel的类全名

UIManagersetLookAndFeel(lnfName);

// setLookAndFeel还可以直接设置设置对象

UIManagersetLookAndFeel(new MetalLookAndFeel());

// UIManagersetLookAndFeel(new MotifLookAndFeel());

// UIManagersetLookAndFeel(new WindowsLookAndFeel());

//SwingUtilities是一个Swing的工具类,提供了很多静态方法。

//updateComponentTreeUI将更新calculator1中所有组件的外观

SwingUtilitiesupdateComponentTreeUI(calculator1);

}

catch (UnsupportedLookAndFeelException ex1) {

Systemerrprintln("Unsupported LookAndFeel: " + lnfName);

}

catch (ClassNotFoundException ex2) {

Systemerrprintln("LookAndFeel class not found: " + lnfName);

}

catch (InstantiationException ex3) {

Systemerrprintln("Could not load LookAndFeel: " + lnfName);

}

catch (IllegalAccessException ex4) {

Systemerrprintln("Cannot use LookAndFeel: " + lnfName);

}

calculator1setVisible(true);

}

}

package 计算器;

import javaawt;

import javaawtevent;

public class computer implements WindowListener,ActionListener{

private Frame f;

double d0,d1,d2,result;

boolean flag=true;

String s,oper;

TextField tf1;

Panel p=new Panel();

public static void main(String args[])

{ computer e=new computer();

ego();

}

public void go(){

int i;

result=0;

s=new String();

oper=new String("+");

f=new Frame("计算器");

MenuBar mb=new MenuBar();

fsetMenuBar(mb);

Menu m1=new Menu("编辑");

Menu m2=new Menu("帮助");

Menu m3=new Menu("关于");

mbadd(m1);

mbadd(m3);

mbsetHelpMenu(m2);

tf1=new TextField("",15);

Button[] b=new Button[21];

for(i=1;i<21;i++)

{

b[i]=new Button();

b[i]setFont(new Font("仿宋",0,16));

}

b[1]setLabel("退格");

b[2]setLabel("CE");

b[3]setLabel("C");

b[4]setLabel("/");

b[5]setLabel("7");

b[6]setLabel("8");

b[7]setLabel("9");

b[8]setLabel("");

b[9]setLabel("4");

b[10]setLabel("5");

b[11]setLabel("6");

b[12]setLabel("-");

b[13]setLabel("1");

b[14]setLabel("2");

b[15]setLabel("3");

b[16]setLabel("+");

b[17]setLabel("0");

b[18]setLabel("+/-");

b[19]setLabel("");

b[20]setLabel("=");

psetLayout(new GridLayout(5,4));

psetBackground(new Color(80,30,100));

for(i=1;i<21;i++)

{ padd(b[i]);

b[i]addActionListener(this);

b[i]setBackground(new Color(20,130,180));

b[i]setForeground(Coloryellow);

}

for(i=1;i<4;i++)

{

b[i]setBackground(new Color(120,180,170));

b[i]setForeground(Colorblue);

}

for(i=1;i<=4;i++)

{ b[i4]setBackground(new Color(120,180,170));

b[i4]setForeground(Colorred);

}

b[20]setBackground(Colorred);

faddWindowListener(this);

fsetLayout(new BorderLayout());

fadd("North",tf1);

fadd("Center",p);

fsetSize(200,200);

fsetVisible(true);

}

public void windowClosing(WindowEvent e){Systemexit(1);}

public void windowOpened(WindowEvent e){}

public void windowIconified(WindowEvent e){}

public void windowDeiconified(WindowEvent e){}

public void windowClosed(WindowEvent e){}

public void windowActivated(WindowEvent e){}

public void windowDeactivated(WindowEvent e){}

public void actionPerformed(ActionEvent e){

String i1=tf1getText();

s=egetActionCommand();

if(s=="0"| s=="1"|s=="2"|s=="3"|s=="4"|s=="5"|s=="6"|s=="7"|s=="8"|s=="9"|s=="")

{ if(flag) tf1setText(i1+s);

else

{ tf1setText(s);

flag=true;

}

}

else if(s=="+"|s=="-"|s==""|s=="/")

{ result=DoubleparseDouble(i1);

flag=false;

oper=s;

}

else if(s=="=")

{ d0=DoubleparseDouble(i1);

if(oper=="+") result+=d0;

if(oper=="-") result-=d0;

if(oper=="") result=d0;

if(oper=="/") result/=d0;

tf1setText(DoubletoString(result));

flag=false;

}

else if(s=="CE")

{ tf1setText("");

flag=false;

}

else if(s=="C")

{ result=0;

tf1setText("");

flag=false;

}

else if(s=="退格")

{ String ss=tf1getText();

int i=sslength();

ss=sssubstring(0,i-1);

tf1setText(ss);

}

else if(s=="+/-")

{ d2=-1DoubleparseDouble(tf1getText());

tf1setText(DoubletoString(d2));

}

}

}

进口的javaawtBorderLayout;

进口javaawtGridLayout中;

进口javaawteventActionEvent;

进口javaawteventActionListener;

进口的javax。 swingJButton;

进口javaxswingJFrame中;

进口javaxswingJPanel;

进口javaxswingJTextField中;

/ /暂时不考虑这个问题甚至添加

/ /点的第二个 *** 作点的 *** 作员点运算符点=结果

公共类计算器实现的ActionListener {

> JTextField的JTF =新的JTextField(10);

私人布尔追加= FALSE;

私人字符串OP1 =“0”;

私人字符串运算符=“+”;

@覆盖

公共无效的actionPerformed(ActionEvent的E){

字符串COMN = egetActionCommand();。!

/ /处理数字

如果(“0123456789”的indexOf(COMN)= -1){

如果(追加){/ /追加

字符串温度= jtfgetText() ;

jtfsetText(温度+ COMN);

}其他{/ /替换

jtfsetText(COMN);

追加= TRUE;

/ /处理运营商

否则,如果(“+ - /”的indexOf(COMN)= -1){

OP1 = JTF。的getText();

运算符= COMN;

追加= FALSE;

的} else if(“=”的indexOf(COMN)= -1。){

字符串OP2 = jtfgetText();

双D1 = DoubleparseDouble(OP1);

双D2 = DoubleparseDouble(OP2);

如果(“+”等于( *** 作者)。){

D1 = D1 + D2;

}否则,如果(“ - ”等于( *** 作员)。){

D1 = D1 - D2;

}否则,如果(“”的equals( *** 作员)。){

D1 = D1 D2;

的} else if(“/”等于( *** 作者)。){

D1 = D1 / D2;

jtfsetText(D1 +“”);

追加= FALSE;

}否则,如果(等于(COMN)“。”){

字符串温度= jtfgetText();

如果(tempindexOf(“;”)== -1){

jtfsetText(温度+“。”);

追加= TRUE;

否则,如果(“+ / - ”的equals(COMN)){

字符串温度= jtfgetText();

如果(tempstartsWith(“-1”)){

JTF。的setText(tempsubstring(1));

}其他{

jtfsetText(“ - ”+温度);

否则,如果(“退格”。等于(COMN)){

字符串温度= jtfgetText();

如果(templength()> 0){

jtfsetText(tempsubstring(0,templength() - 1));

}

的} else if(“CE”等于(COMN)| |“C”等于(COMN)){

jtfsetText(“0”);

追加= FALSE;

公众计算器(){

JFrame的JF =新的JFrame(“计算器”);

jfadd(JTF,BorderLayoutNORTH);

字串[] S1 = {“退格”,“CE”,“C”,“+”,“7”,“8”,“9”,“/”,“4”,

“5”,“6”,“”,“1”,“2”,“3”,“ - ”,“0”,“+ / - ”,“”,。 “=”};

的JPanel JP =新的JPanel();

jfadd(JP,使用BorderLayoutCENTER);

网格布局GL =新的网格布局(5,4); jpsetLayout(GL);

JButton的[] JB =新的JButton [s1length];

为(int i = 0;我<s1length,我+ +){

JB [我] =新的JButton(S1由[i]);

jpadd(JB由[i]);。

JB [I] addActionListener方法,(这);

} jfadd(JP);

jtfsetEditable(假);

jfsetLocation(400,300);

jfpack();

jfsetResizable(假);/ /设置窗口不可改变

jfsetDefaultCloseOperation(jfEXIT_ON_CLOSE);

jfsetVisible(真);

公共静态无效的主要(字串[] args){

新的计算器();

这个函数比较简单,不知道能不能满足要求

现在是一段核心程序,只有单位数的四则运算,需要实现多位数运算和小数点功能,最好还有正负号。万分感谢!

import javaawt;

import javaapplet;

public class calc10 extends Applet {

char key,prevopr;

float ans,num;

char[] btext={'0','1','2','3','4','5',

'6','7','8','9','-','+','','/'};

Button[] buttons = new Button[btextlength];

public void init() {

for (int i=0; i<btextlength; i++) {

buttons[i] = new Button(""+btext[i]);

add(buttons[i]);

}

}

public float apply(float num1, char opr, float num2) {

switch (opr) {

case '+': return(ans+num);

case '-': return(ans-num);

case '': return(ansnum);

case '/': return(ans/num);

default: return(num);

}

}

public boolean action(Event evt,Object arg){

key = ((String)arg)charAt(0);

if(key>='0' && key<='9') {

num = (float)(key-'0');

showStatus(""+key);

} else {

ans = apply(ans,prevopr,num);

showStatus( "" + ans );

prevopr=key;

}

return true;

}

}

以上就是关于用java设计一个计算器 1.可以没有界面,但要有输入和输出 2.整数,小数,加减乘除,求余,括号全部的内容,包括:用java设计一个计算器 1.可以没有界面,但要有输入和输出 2.整数,小数,加减乘除,求余,括号、java计算器程序、java编程设计计算器 急急急!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9274353.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存