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

Python013

如何用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.*

import javax.swing.*

import java.awt.event.*

class Counter extends WindowAdapter

{

static JFrame f=new JFrame("计算器")

static JTextField text1=new JTextField("0.")

static String source=""

static String cal=""

static String object=""

static boolean flag=false

static boolean flag1=true

static boolean flag2=false

public void init()

{

try

{

Container c=f.getContentPane()

JPanel pan1=new JPanel()

JButton b1=new JButton("1")

JButton b2=new JButton("2")

JButton b3=new JButton("3")

JButton b4=new JButton("4")

JButton b5=new JButton("5")

JButton b6=new JButton("6")

JButton b7=new JButton("7")

JButton b8=new JButton("8")

JButton b9=new JButton("9")

JButton b0=new JButton("0")

JButton b11=new JButton("+")

JButton b12=new JButton("-")

JButton b13=new JButton("*")

JButton b14=new JButton("/")

JButton b15=new JButton(".")

JButton b16=new JButton("=")

JButton bclar=new JButton("清零")

text1.setHorizontalAlignment(JTextField.RIGHT)

c.add(text1,"North")

c.add(pan1)

A aa=new A()

Result re=new Result()

Opertion op=new Opertion()

Clar cl=new Clar()

b1.addActionListener(aa)

b2.addActionListener(aa)

b3.addActionListener(aa)

b4.addActionListener(aa)

b5.addActionListener(aa)

b6.addActionListener(aa)

b7.addActionListener(aa)

b8.addActionListener(aa)

b9.addActionListener(aa)

b0.addActionListener(aa)

b11.addActionListener(op)

b12.addActionListener(op)

b13.addActionListener(op)

b14.addActionListener(op)

b16.addActionListener(re)

b15.addActionListener(aa)

bclar.addActionListener(cl)

pan1.add(b1)

pan1.add(b2)

pan1.add(b3)

pan1.add(b11)

pan1.add(b4)

pan1.add(b5)

pan1.add(b6)

pan1.add(b12)

pan1.add(b7)

pan1.add(b8)

pan1.add(b9)

pan1.add(b13)

pan1.add(b0)

pan1.add(b15)

pan1.add(b16)

pan1.add(b14)

pan1.add(bclar)

f.setSize(200,220)

f.setVisible(true)

}

catch(Exception e)

{

System.out.println(e.getMessage())

}

}

class A implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

String a=text1.getText()

String s=e.getActionCommand()

if(a.equals("0.")||a.equals("+")||a.equals("-")||a.equals("*")||a.equals("/"))

text1.setText(s)

else {

if(flag2)

{

text1.setText(s)

flag2=false

}

else

text1.setText(a+s)

}

}

}

class Opertion implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

cal=e.getActionCommand()

if(flag1==true)

source=text1.getText()

text1.setText(cal)

flag1=false

flag=true

}

}

class Result implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

double num1

num1=Double.parseDouble(source)

object=text1.getText()

double num2

num2=Double.parseDouble(object)

double result=0

if(cal.equals("+"))

result=num1+num2

if(cal.equals("-"))

result=num1-num2

if(cal.equals("*"))

result=num1*num2

if(cal.equals("/"))

if(num2==0)

text1.setText("除数不能为0")

else

result=num1/num2

String s1=Double.toString(result)

text1.setText(s1)

flag1=true

flag2=true

}

}

class Clar implements ActionListener

{

public void actionPerformed(ActionEvent e)

{

text1.setText("0.")

}

}

public static void main(String[] args)

{

Counter count=new Counter()

count.init()

}

public void windowClosing(WindowEvent e){

System.exit(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){}

}

import javax.swing.*

import javax.swing.border.Border

import java.awt.*

import java.awt.event.ActionListener

import java.awt.event.ActionEvent

import java.math.BigDecimal

import java.math.RoundingMode

import java.util.HashMap

/**

* 我的计算器。Cheshi 继承于 JFrame,是计算器的界面

c*/

public class Cheshi extends JFrame {

private Border border = BorderFactory.createEmptyBorder(5, 5, 5, 5)

private JTextField textbox = new JTextField("0")

private CalculatorCore core = new CalculatorCore()

private ActionListener listener = new ActionListener() {

public void actionPerformed(ActionEvent e) {

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)

panel.setLayout(new GridLayout(4, 5, 3, 3))

createButtons(panel, new String[]{

"7", "8", "9", "+", "C",

"4", "5", "6", "-", "CE",

"1", "2", "3", "*", "", // 空字符串表示这个位置没有按钮

"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() {

JPanel panel = new JPanel()

panel.setLayout(new BorderLayout())

panel.setBorder(border)

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.setLocation(100, 50) // 设置窗体显示在桌面上的位置

this.setSize(300, 200)// 设置窗体大小

this.setResizable(false) // 窗体大小固定

}

// 程序入口

public static void main(String[] args) throws Exception {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())

Cheshi frame = new Cheshi("我的计算器")

frame.setVisible(true) // 在桌面上显示窗体

}

}

/**

* 计算器核心逻辑。这个逻辑只能处理 1~2 个数的运算。

*/

class CalculatorCore {

private String displayText = "0" // 要显示的文本

boolean reset = true

private BigDecimal number1, number2

private String operator

private HashMap<String, Operator>operators = new HashMap<String, Operator>()

private HashMap<String, Processor>processors = new HashMap<String, Processor>()

CalculatorCore() {

setupOperators()

setupProcessors()

}

// 为每种命令添加处理方式

private void setupProcessors() {

processors.put("[0-9]", new Processor() {

public void calculate(String command) {

numberClicked(command)

}

})

processors.put("\\.", new Processor() {

public void calculate(String command) {

dotClicked()

}

})

processors.put("=", new Processor() {

public void calculate(String command) {

equalsClicked()

}

})

processors.put("[+\\-*/]", new Processor() {

public void calculate(String command) {

operatorClicked(command)

}

})

processors.put("C", new Processor() {

public void calculate(String command) {

clearClicked()

}

})

processors.put("CE", new Processor() {

public void calculate(String command) {

clearErrorClicked()

}

})

}

// 为每种 operator 添加处理方式

private void setupOperators() {

operators.put("+", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.add(number2)

}

})

operators.put("-", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.subtract(number2)

}

})

operators.put("*", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.multiply(number2)

}

})

operators.put("/", new Operator() {

public BigDecimal process(BigDecimal number1, BigDecimal number2) {

return number1.divide(number2, 30, RoundingMode.HALF_UP)

}

})

}

// 根据命令处理。这里的命令实际上就是按钮文本。

public String process(String command) {

for (String pattern : processors.keySet()) {

if (command.matches(pattern)) {

processors.get(pattern).calculate(command)

break

}

}

return displayText

}

// 当按下 CE 时

private void clearErrorClicked() {

if (operator == null) {

number1 = null

} else {

number2 = null

}

displayText = "0"

reset = true

}

// 当按下 C 时,将计算器置为初始状态。

private void clearClicked() {

number1 = null

number2 = null

operator = null

displayText = "0"

reset = true

}

// 当按下 = 时

private void equalsClicked() {

calculateResult()

number1 = null

number2 = null

operator = null

reset = true

}

// 计算结果

private void calculateResult() {

number2 = new BigDecimal(displayText)

Operator oper = operators.get(operator)

if (oper != null) {

BigDecimal result = oper.process(number1, number2)

displayText = result.toString()

}

}

// 当按下 +-*/ 时(这里也可以扩展成其他中间操作符)

private void operatorClicked(String command) {

if (operator != null) {

calculateResult()

}

number1 = new BigDecimal(displayText)

operator = command

reset = true

}

// 当按下 . 时

private void dotClicked() {

if (displayText.indexOf(".") == -1) {

displayText += "."

} else if (reset) {

displayText = "0."

}

reset = false

}

// 当按下 0-9 时

private void numberClicked(String command) {

if (reset) {

displayText = command

} else {

displayText += command

}

reset = false

}

// 运算符处理接口

interface Operator {

BigDecimal process(BigDecimal number1, BigDecimal number2)

}

// 按钮处理接口

interface Processor {

void calculate(String command)

}

}