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

Python031

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

public Normal(double num1,double num2){

i=num1

j=num2

}

public double puls(){

return i+j

}

public double subtract(){

return i-j

}

public double multiply(){

return i*j

}

public double divide(){

return i/j

}

public double surpuls(){

return i%j

}

}

class scientific extends Normal{

public scientific(int num1, int num2) {

super(num1, num2)

}

}

public class calc extends JFrame{

public static void main(String[] args) {

viewNormal VN= new viewNormal("normal")

}

}

class viewNormal extends JFrame implements ActionListener{

JPanel jp1 = new JPanel(new GridLayout(4,3,5,5))

JPanel jp2 = new JPanel(new GridLayout(5,1,5,5))

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)

setBounds(200,200,305,350)

setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)

jb= new JButton[12]

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

jb[i]=new JButton(""+(i+1))

jp1.add(jb[i])

jb[i].addActionListener(this)

}

jb[9]=new JButton(".")

jb[10]=new JButton("0")

jb[11]=new JButton("=")

jb[9].addActionListener(this)

jb[10].addActionListener(this)

jb[11].addActionListener(this)

jp1.add(jb[9])

jp1.add(jb[10])

jp1.add(jb[11])

jp1.setBounds(10, 100, 200, 200)

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)

//jp2.add(jby)

jp2.add(jbs)jp2.add(jbo)jp2.add(jba)jp2.add(jbb)jp2.add(jbc)

jp2.setBounds(215, 100, 70, 200)

jl= new JLabel("0",JLabel.RIGHT)

jl.setFont(new Font("Batang",Font.BOLD, 20))

jl.setBorder(new LineBorder(Color.black,2))

jl.setBackground(Color.white)

jl.setBounds(10, 40, 275, 50)

jl.setOpaque(true)

add(jl)

add(jp1)

add(jp2)

}

//+

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

lnum=Double.parseDouble(sb.toString())

normal=new Normal(fnum,lnum)

fnum=normal.subtract()

result=fnum

}

//*

private void mul() {

lnum=Double.parseDouble(sb.toString())

normal=new Normal(fnum,lnum)

fnum=normal.multiply()

result=fnum

}

// /

private void div() {

lnum=Double.parseDouble(sb.toString())

normal=new Normal(fnum,lnum)

fnum=normal.divide()

result=fnum

}

//%

private void sur() {

lnum=Double.parseDouble(sb.toString())

normal=new Normal(fnum,lnum)

fnum=normal.surpuls()

result=fnum

}

// =

private void same(){

if(sign.equals("+")){

sum()

}

if(sign.equals("-")){

sub()

}

if(sign.equals("*")){

mul()

}

if(sign.equals("/")){

div()

}

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

// 1~9

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

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)

sb.append(jb[i].getText())

jl.setText(sb.toString())

}

}

// 0

if(e.getSource()==jb[10]&&!sb.toString().equals("0")){

sb.append(jb[10].getText())

jl.setText(sb.toString())

}

// .

if(e.getSource()==jb[9]&&dot==0&&!sb.toString().equals("")){

dot++

sb.append(jb[9].getText())

jl.setText(sb.toString())

}

// =

if(e.getSource()==jb[11]&&!sb.toString().equals("")){

same()

Result()

int d=sb.length()

sb.delete(0, d)

dot=0

}

// +

if(e.getSource()==jbs&&!sb.toString().equals("")){

if(sign!="+"&&sign!=null)

same()

else

sum()

sign ="+"

Result()

int d=sb.length()

sb.delete(0, d)

dot=0

}

//-

if(e.getSource()==jbo&&!sb.toString().equals("")){

if(fnum==0)

fnum=2*Double.parseDouble(sb.toString())

if(sign!="-"&&sign!=null)

same()

else

sub()

sign ="-"

Result()

int d=sb.length()

sb.delete(0, d)

dot=0

}

//*

if(e.getSource()==jba&&!sb.toString().equals("")){

if(fnum==0)

fnum=1

if(sign!="*"&&sign!=null)

same()

else

mul()

sign ="*"

Result()

int d=sb.length()

sb.delete(0, d)

dot=0

}

// /

if(e.getSource()==jbb&&!sb.toString().equals("")){

if(fnum==0)

fnum=Math.pow(Double.parseDouble(sb.toString()),2)

if(sign!="/"&&sign!=null)

same()

else

div()

sign ="/"

Result()

int d=sb.length()

sb.delete(0, d)

dot=0

}

//%

// 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()

//result=fnum

//}

// }

// sign ="%"

// Result()

// int d=sb.length()

// sb.delete(0, d)

// dot=0

// }

//clear

if(e.getSource()==jbc){

int d=sb.length()

sb.delete(0, d)

jl.setText("0")

dot=0

fnum=0

lnum=0

sign=null

}

}

}

class viewScientific extends viewNormal{

public viewScientific(String title){

super(title)

setBounds(200,200,800,500)

}

}

//等号以后输入符号用不了, String转 double 本来就有错误,你可以用我的扩展成科学型的。