如何用JAVA语言编写计算器小程序?

Python010

如何用JAVA语言编写计算器小程序?,第1张

具体代码如下:

import javax.swing.*

import java.awt.event.*

import java.awt.*

public class Calculator  extends JFrame implements ActionListener  {

private JFrame jf

private JButton[] allButtons

private JButton clearButton

private JTextField jtf

public Calculator() {

//对图形组件实例化

jf=new JFrame("任静的计算器1.0:JAVA版")

jf.addWindowListener(new WindowAdapter(){

public void windowClosing(){

System.exit(0)

}

})

allButtons=new JButton[16]

clearButton=new JButton("清除")

jtf=new JTextField(25)

jtf.setEditable(false)

String str="123+456-789*0.=/"

for(int i=0i<allButtons.lengthi++){

allButtons[i]=new JButton(str.substring(i,i+1))

}

}

public void init(){

//完成布局

jf.setLayout(new BorderLayout())

JPanel northPanel=new JPanel()

JPanel centerPanel=new JPanel()

JPanel southPanel=new JPanel()

northPanel.setLayout(new FlowLayout())

centerPanel.setLayout(new GridLayout(4,4))

southPanel.setLayout(new FlowLayout())

northPanel.add(jtf)

for(int i=0i<16i++){

centerPanel.add(allButtons[i])

}

southPanel.add(clearButton)

jf.add(northPanel,BorderLayout.NORTH)

jf.add(centerPanel,BorderLayout.CENTER)

jf.add(southPanel,BorderLayout.SOUTH)

addEventHandler()

}

//添加事件监听

public void addEventHandler(){

jtf.addActionListener(this)

for(int i=0i<allButtons.lengthi++){

allButtons[i].addActionListener(this)

}

clearButton.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

Calculator.this.jtf.setText("")

}

})

}

//事件处理

public void actionPerformed(ActionEvent e) {

//在这里完成事件处理  使计算器可以运行

String action=e.getActionCommand()

if(action=="+"||action=="-"||action=="*"||action=="/"){

}

}

public void setFontAndColor(){

Font f=new Font("宋体",Font.BOLD,24)

jtf.setFont(f)

jtf.setBackground(new Color(0x8f,0xa0,0xfb))

for(int i=0i<16i++){

allButtons[i].setFont(f)

allButtons[i].setForeground(Color.RED)

}

}

public void showMe(){

init()

setFontAndColor()

jf.pack()

jf.setVisible(true)

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

}

public static void main(String[] args){

new Calculator().showMe()

}

}

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.ImageIcon

import javax.swing.JButton

import javax.swing.JFrame

import javax.swing.JPanel

import javax.swing.JTextField

import javax.swing.SwingConstants

public class Jisuanqi extends JFrame implements ActionListener {

/**

 *

 */

private static final long serialVersionUID = 1L

Result result = new Result() // 定义text的面板

Number_Key number_key = new Number_Key() // 定义按钮面板

// 当点击按钮+、-、*、/时,com = true

boolean com = false

// 当i=0时说明是我们第一次输入,字符串text不会累加

int i = 0

// 存放text的内容

String text = ""

// 存放点击按钮+、-、*、/之前的数值

double defbutton = 0

// +、-、*、/的代号分别为1,2,3,4

int symbol = 0

// 构造函数

Jisuanqi() {

super("WangJiao") // 设定标题

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) // 设定关闭窗体时退出程序

JPanel pane = new JPanel() // 定义主面板

pane.setLayout(new BorderLayout())

setBounds(380, 220, 30, 80) // 前两个参数是在屏幕上显示的坐标,后两个是大小

// 替换图标

ImageIcon icon = new ImageIcon("F:1.GIF")

// Jisuanqi.class.getResource("APPLE.GIF")

// )

setIconImage(icon.getImage())

pane.add(result, BorderLayout.NORTH)

pane.add(number_key, BorderLayout.CENTER)

pane.add(number_key.equal, BorderLayout.SOUTH)

number_key.one.addActionListener(this) // 对1按钮添加监听事件

number_key.two.addActionListener(this) // 对2按钮添加监听事件

number_key.three.addActionListener(this) // 对3按钮添加监听事件

number_key.four.addActionListener(this) // 对4按钮添加监听事件

number_key.five.addActionListener(this) // 对5按钮添加监听事件

number_key.six.addActionListener(this) // 对6按钮添加监听事件

number_key.seven.addActionListener(this) // 对7按钮添加监听事件

number_key.eight.addActionListener(this) // 对8按钮添加监听事件

number_key.nine.addActionListener(this) // 对9按钮添加监听事件

number_key.zero.addActionListener(this) // 对0按钮添加监听事件

number_key.ce.addActionListener(this) // 对置零按钮添加监听事件

number_key.plus.addActionListener(this) // 对+按钮添加监听事件

number_key.equal.addActionListener(this) // 对=按钮添加监听事件

number_key.sub.addActionListener(this) // 对-按钮添加监听事件

number_key.mul.addActionListener(this) // 对*按钮添加监听事件

number_key.div.addActionListener(this) // 对/按钮添加监听事件

number_key.point.addActionListener(this) // 对.按钮添加监听事件

setContentPane(pane)

pack() // 初始化窗体大小为正好盛放所有按钮

}

// 各个按钮触发的事件

public void actionPerformed(ActionEvent e) {

/*

 * 如果是点击数字按钮那么先要判断是否在此之前点击了+、-、*、/、=,如果是那么com=true 如果没有com=

 * false或者是否点击数字键,如果是i = 1,如果没有 i = 0

 */

if (e.getSource() == number_key.one) {

if (com || i == 0) {

result.text.setText("1")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "1")

}

} else if (e.getSource() == number_key.two) {

if (com || i == 0) {

result.text.setText("2")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "2")

}

} else if (e.getSource() == number_key.three) {

if (com || i == 0) {

result.text.setText("3")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "3")

}

} else if (e.getSource() == number_key.four) {

if (com || i == 0) {

result.text.setText("4")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "4")

}

} else if (e.getSource() == number_key.five) {

if (com || i == 0) {

result.text.setText("5")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "5")

}

} else if (e.getSource() == number_key.six) {

if (com || i == 0) {

result.text.setText("6")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "6")

}

} else if (e.getSource() == number_key.seven) {

if (com || i == 0) {

result.text.setText("7")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "7")

}

} else if (e.getSource() == number_key.eight) {

if (com || i == 0) {

result.text.setText("8")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "8")

}

} else if (e.getSource() == number_key.nine) {

if (com || i == 0) {

result.text.setText("9")

com = false

i = 1

} else {

text = result.text.getText()

result.text.setText(text + "9")

}

}

/*

 * 对于0这个按钮有一定的说法,在我的程序里不会出现如00000这样的情况,我加了判断条件就是

 * 如果text中的数值=0就要判断在这个数值中是否有.存在?如果有那么就在原来数值基础之上添 加0否则保持原来的数值不变

 */

else if (e.getSource() == number_key.zero) { // result.text.getText()是得到text里内容的意思

if (com || i == 0) {

result.text.setText("0")

com = false

i = 1

} else {

text = result.text.getText()

if (Float.parseFloat(text) > 0 || Float.parseFloat(text) < 0) { // Float.parseFloat(text)就是类型转换了,下面都是一样

result.text.setText(text + "0")

} else {

if (text.trim().indexOf(".") == -1) {

result.text.setText(text)

} else {

result.text.setText(text + "0")

}

}

}

} else if (e.getSource() == number_key.ce) {

result.text.setText("0")

i = 0

com = true

// text = ""

defbutton = 0

}

/*

 * 本程序不会让一个数值中出现2个以上的小数点.具体做法是:判断是否已经存在.存在就不添加, 不存在就添加.

 */

else if (e.getSource() == number_key.point) {

if (com || i == 0) {

result.text.setText("0.")

com = false

i = 1

} else {

text = result.text.getText()

if (text.trim().indexOf(".") == -1) {

result.text.setText(text + ".")

} else {

result.text.setText(text)

}

}

} // 获得点击+之前的数值

else if (e.getSource() == number_key.plus) {

com = true

i = 0

defbutton = Double.parseDouble(result.text.getText())

symbol = 1

} // 获得点击-之前的数值

else if (e.getSource() == number_key.sub) {

com = true

i = 0

defbutton = Double.parseDouble(result.text.getText())

symbol = 2

} // 获得点击*之前的数值

else if (e.getSource() == number_key.mul) {

com = true

i = 0

defbutton = Double.parseDouble(result.text.getText())

System.out.println(defbutton)

symbol = 3

} // 获得点击/之前的数值

else if (e.getSource() == number_key.div) {

com = true

i = 0

defbutton = Double.parseDouble(result.text.getText())

symbol = 4

} else if (e.getSource() == number_key.equal) {

switch (symbol) {

case 1: { // 计算加法

double ad = defbutton

+ Double.parseDouble(result.text.getText())

result.text.setText(ad + "")

i = 0

text = ""

break

}

case 2: { // 计算减法

double ad = defbutton

- Double.parseDouble(result.text.getText())

result.text.setText(String.valueOf(ad))

i = 0

text = ""

break

}

case 3: { // 计算乘法

double ad = defbutton

* Double.parseDouble(result.text.getText())

result.text.setText(ad + "")

i = 0

text = ""

break

}

case 4: { // 计算除法

double ad = defbutton

/ Double.parseDouble(result.text.getText())

result.text.setText(ad + "")

i = 0

text = ""

break

}

}

System.out.println(com)

}

System.out.println(result.text.getText())

}

@SuppressWarnings("deprecation")

public static void main(String[] args) {

Jisuanqi loveyou = new Jisuanqi()

loveyou.show()

}

}

// 计算器数字按钮定义面板

class Number_Key extends JPanel {

/**

 *

 */

private static final long serialVersionUID = 1L

JButton zero = new JButton("0") // 数字键0

JButton one = new JButton("1") // 数字键1

JButton two = new JButton("2") // 数字键2

JButton three = new JButton("3") // 数字键3

JButton four = new JButton("4") // 数字键4

JButton five = new JButton("5") // 数字键5

JButton six = new JButton("6") // 数字键6

JButton seven = new JButton("7") // 数字键7

JButton eight = new JButton("8") // 数字键8

JButton nine = new JButton("9") // 数字键9

JButton plus = new JButton("+")

JButton sub = new JButton("-")

JButton mul = new JButton("*")

JButton div = new JButton("/")

JButton equal = new JButton("=")

JButton ce = new JButton("清零") // 置零键

JButton point = new JButton(".")

Number_Key() {

setLayout(new GridLayout(4, 4, 1, 1)) // 定义布局管理器为网格布局

setBackground(Color.blue) // 设置背景颜色

// 添加按钮

add(one)

add(two)

add(three)

add(four)

add(five)

add(six)

add(seven)

add(eight)

add(nine)

add(zero)

add(plus)

add(sub)

add(mul)

add(div)

add(point)

add(equal)

add(ce)

}

}

// 计算器显示结果的窗体

class Result extends JPanel {

/**

 *

 */

private static final long serialVersionUID = 1L

// text先是输入和结果

JTextField text = new JTextField("0")

@SuppressWarnings("deprecation")

Result() { // 讲输入的数字或得到的结果在text的右边显示

text.setHorizontalAlignment(SwingConstants.RIGHT)

text.enable(false) // 文本框不能编辑

setLayout(new BorderLayout()) // 设定布局管理器边框布局

add(text, BorderLayout.CENTER) // text放置在窗体的中间

}

}

直接复制 保存成Jisuanqi .java可以直接运行了

package Test

import java.awt.*

import java.awt.event.*

import java.util.*

import javax.swing.*

public class Calculator extends JFrame{

private float op1,op2//定义两个变量存放需要运算的值

private String str=""//定义str去和text进行交叉赋值

private String opr,co//opr存放符合,co用来存放复制的内容

private double re//用来存放运算的结果

private boolean bo=false//是否进行了+-*/运算

private boolean btime=false//时间开关

Container contentpane=this.getContentPane()

JPanel panel1=new JPanel(new BorderLayout()),

panel2=new JPanel(new FlowLayout()),

panel3=new JPanel(new GridLayout(4,5)),

panel4=new JPanel(new BorderLayout()),

panel5=new JPanel(new BorderLayout())

//菜单栏

JMenuBar menubar=new JMenuBar()

JMenu edit=new JMenu("编辑(E)"),

find=new JMenu("查看(V)"),

help=new JMenu("帮助(H)")

JMenuItem copy=new JMenuItem("复制(C)",'C'),

paste=new JMenuItem("粘贴(P)",'P'),

standard=new JMenuItem("标准型(T)",'T'),

science=new JMenuItem("科学型(S)",'S'),

numarray=new JMenuItem("数字分组(I)",'I'),

helptopic=new JMenuItem("帮助主题(H)",'H'),

aboutcal=new JMenuItem("关于计算器(A)",'A')

//输入文本框

JTextField text=new JTextField(25)

//数字键

JButton one=new JButton("1"),

two=new JButton("2"),

three=new JButton("3"),

four=new JButton("4"),

five=new JButton("5"),

six=new JButton("6"),

seven=new JButton("7"),

eight=new JButton("8"),

nine=new JButton("9"),

zero=new JButton("0")

//功能键

JButton division=new JButton("/"),

multiply=new JButton("*"),

addition=new JButton("+"),

subtration=new JButton("-"),

sqrt=new JButton("sqrt"),

residual=new JButton("%"),

sign=new JButton("+/-"),

dot=new JButton("."),

reciprocal=new JButton("1/X"),

amount=new JButton("="),

backspace=new JButton("Backspace"),

ce=new JButton("CE"),

c=new JButton("C"),

time=new JButton("time")

public Calculator() {

contentpane.setLayout(new BorderLayout())

//textField文本从右边开始写

text.setHorizontalAlignment(SwingConstants.RIGHT)

text.setText("0.")

//菜单栏添加

edit.add(copy)

edit.add(paste)

find.add(standard)

find.add(science)

find.addSeparator()

find.add(numarray)

help.add(helptopic)

help.addSeparator()

help.add(aboutcal)

//把组件添加至容器中

menubar.add(edit)

menubar.add(find)

menubar.add(help)

panel1.add(menubar,"North")

panel1.add(text,"West")

//添加数字、功能键至panel2、panel3

panel2.add(backspace)

panel2.add(ce)

panel2.add(c)

panel2.add(time)

panel3.add(seven)

panel3.add(eight)

panel3.add(nine)

panel3.add(division)

panel3.add(sqrt)

panel3.add(four)

panel3.add(five)

panel3.add(six)

panel3.add(multiply)

panel3.add(residual)

panel3.add(one)

panel3.add(two)

panel3.add(three)

panel3.add(subtration)

panel3.add(reciprocal)

panel3.add(zero)

panel3.add(sign)

panel3.add(dot)

panel3.add(addition)

panel3.add(amount)

panel4.add(panel2,"North")

panel4.add(panel3,"West")

panel5.add(panel1,"North")

panel5.add(panel4,"West")

contentpane.add(panel5,"North")

//事件

//助记符

edit.setMnemonic('E')

find.setMnemonic('V')

help.setMnemonic('H')

//快捷键

KeyStroke kcopy=KeyStroke.getKeyStroke(KeyEvent.VK_C,Event.CTRL_MASK)

copy.setAccelerator(kcopy)

KeyStroke kpaste=KeyStroke.getKeyStroke(KeyEvent.VK_V,Event.CTRL_MASK)

paste.setAccelerator(kpaste)

//0-9、.的显示事件

actionlistener1 al1=new actionlistener1()

one.addActionListener(al1)

two.addActionListener(al1)

three.addActionListener(al1)

four.addActionListener(al1)

five.addActionListener(al1)

six.addActionListener(al1)

seven.addActionListener(al1)

eight.addActionListener(al1)

nine.addActionListener(al1)

//小数点的ActionListener事件

dot.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int count

count=str.length()

//1.第一位就为.时改变text中内容为:"0."

if(count==0){

str="0."

text.setText(str)

}

//2.不可以重复按"."

else {if(!str.contains(".")){

str+="."

text.setText(str)

}

else

System.out.println("您再点的话,输入的将不再是小数了!")

}

}

})

//如果第一位是0那么第二位就不可以为0

zero.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int count

count=str.length()

if(bo){

if(!(str.contains("0")&&count==1)){

str=""

str+="0"

text.setText(str)

}else

System.out.println("您再点的话,输入的将不再是数字了!")

}

else{

if(!(str.contains("0")&&count==1)){

str+="0"

text.setText(str)

}else

System.out.println("您再点的话,输入的将不再是数字了!")

}

bo=false

}

})

//+、-、*、/、%运算

actionlistener3 al3=new actionlistener3()

addition.addActionListener(al3)

subtration.addActionListener(al3)

multiply.addActionListener(al3)

division.addActionListener(al3)

residual.addActionListener(al3)

//CE和C清空按钮时间

actionlistener2 al2=new actionlistener2()

ce.addActionListener(al2)

c.addActionListener(al2)

//退格键

backspace.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int count

count=str.length()-1

if(bo==false){

if(count>=0){

str=str.substring(0,count)

text.setText(str)

}

else

text.setText("0.")

}else

System.out.println("您现在正进行法则运算!")

}

})

//求平方根

sqrt.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int count

count=str.length()

if(count!=0){

op1=Float.parseFloat(text.getText())

re=Math.sqrt(op1)

String str1=String.valueOf(re)

text.setText(str1)

str=""

}

else

System.out.println("您现在的按sqrt键毫无意义")

}

})

//求倒数

reciprocal.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int count

count=str.length()

if(count!=0){

op1=Float.parseFloat(text.getText())

if(op1!=0){

re=1/op1

String str1=String.valueOf(re)

text.setText(str1)

str=str1

}

else{

text.setText("除数不可以为0的")

str=""

}

}

else

System.out.println("您现在的按1/X键毫无意义")

}

})

//=事件

amount.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

op2=Float.parseFloat(str)

//需判断进行那种运算法则

if(opr=="+"){//加法运算

re=op1+op2

String str1=String.valueOf(re)

text.setText(str1)

str=String.valueOf(re)

}else{

if(opr=="-"){//减法运算

re=op1-op2

String str1=String.valueOf(re)

text.setText(str1)

str=String.valueOf(re)

}else{

if(opr=="*"){//乘法运算

re=op1*op2

String str1=String.valueOf(re)

text.setText(str1)

str=String.valueOf(re)

}else{

if(opr=="/"&&op2!=0){//除法运算

re=op1/op2

String str1=String.valueOf(re)

text.setText(str1)

str=String.valueOf(re)

}else{

if(opr=="%"){//取余运算

re=op1%op2

String str1=String.valueOf(re)

text.setText(str1)

str=""

}

else if(op2==0){

text.setText("除数不可以为0的")

str=""

}

}

}

}

}

//打印看看

System.out.print(op1)

System.out.print(opr)

System.out.print(op2+"=")

System.out.print(re)

System.out.println()

}

})

//复制事件

copy.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int count

count=str.length()

if(count!=0){

co=text.getText()

}

else

System.out.println("没有可复制的对象")

}

})

//粘贴事件

paste.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

str=co

text.setText(str)

}

})

//时间事件

time.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

if(btime==false){

String st=(new Date()).toString()

text.setText(st)

str=""

btime=true

}

else{

text.setText(str)

btime=false

}

}

})

//+/-事件

sign.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

int a=Integer.valueOf(str)

a=a*(-1)

str=String.valueOf(a)

text.setText(str)

}

})

}

//定义1-9按钮在text中显示的内部类

class actionlistener1 implements ActionListener{

public void actionPerformed(ActionEvent e){

JButton button=(JButton)e.getSource()

String btext=button.getText()

//如果第一位为0再输入其他非零的整数时将零忽略

if(bo){

if(str.indexOf("0")==0&&str.length()==1){

str=""

str+=btext

text.setText(str)

}else{

str=""

str+=btext

text.setText(str)}

}else{

if(str.indexOf("0")==0&&str.length()==1){

str=""

str+=btext

text.setText(str)

}else{

str+=btext

text.setText(str)

}

}

bo=false

}

}

//定义清空text中内容的内部类

class actionlistener2 implements ActionListener{

public void actionPerformed(ActionEvent e){

str=""

text.setText("0.")

}

}

//定义+、-、*、/、%运算的内部类

class actionlistener3 implements ActionListener{

public void actionPerformed(ActionEvent e){

int count

count=str.length()

if(count!=0){

JButton button=(JButton)e.getSource()

opr=button.getText()

op1=Float.parseFloat(str)

bo=true

}

else

System.out.println("您现在的按键毫无意义!")

}

}

public static void main(String[] args){

Calculator cc=new Calculator()

cc.pack()

cc.setResizable(false)//不可最大化

cc.setVisible(true)

cc.setTitle("计算器")

cc.setDefaultCloseOperation(EXIT_ON_CLOSE)

Dimension scmsize=Toolkit.getDefaultToolkit().getScreenSize()

int w=cc.getSize().width

int h=cc.getSize().height

int x=(scmsize.width-w)/2

int y=(scmsize.height-h)/2

cc.setLocation(x, y)

}

}