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

如何用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可以直接运行了

仅供参考,最好自己亲自动手写,这样才会有进步

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放置在窗体的中间

}

}


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

原文地址: http://outofmemory.cn/yw/7821180.html

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

发表评论

登录后才能评论

评论列表(0条)

保存