java课程设计---计算器 要求如下:

Python017

java课程设计---计算器 要求如下:,第1张

import java.awt.*

import java.awt.event.*

import javax.swing.*

import javax.swing.border.*

import java.util.LinkedList

import java.io.*

public class CalculatorWindow extends JFrame implements ActionListener{

NumberButton numberButton[]

OperationButton operationButton[]

JButton 小数点操作,正负号操作,退格操作,等号操作,清零操作,sin

JTextField resultShow //显示计算结果

JTextField showComputerProcess//显示当前计算过程

JTextArea saveComputerProcess//显示计算步骤

JButton saveButton,copyButton,clearButton

LinkedList<String>list //链表用来存放第一个运算数、运算符号和第二个运算数

HandleDigit handleDigit //负责处理ActionEvent事件

HandleOperation handleOperation

HandleBack handleBack

HandleClear handleClear

HandleEquality handleEquality

HandleDot handleDot

HandlePOrN handlePOrN

HandleSin handleSin

public CalculatorWindow(){

setTitle("计算器")

JPanel panelLeft,panelRight

list=new LinkedList<String>()

resultShow=new JTextField(10)

resultShow.setHorizontalAlignment(JTextField.RIGHT)

resultShow.setForeground(Color.blue)

resultShow.setFont(new Font("TimesRoman",Font.BOLD,16))

resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED))

resultShow.setEditable(false)

resultShow.setBackground(Color.white)

showComputerProcess=new JTextField()

showComputerProcess.setHorizontalAlignment(JTextField.CENTER)

showComputerProcess.setFont(new Font("Arial",Font.BOLD,16))

showComputerProcess.setBackground(Color.cyan)

showComputerProcess.setEditable(false)

saveComputerProcess=new JTextArea()

saveComputerProcess.setEditable(false)

saveComputerProcess.setFont(new Font("宋体",Font.PLAIN,16))

numberButton=new NumberButton[10]

handleDigit=new HandleDigit(list,resultShow,showComputerProcess)

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

numberButton[i]=new NumberButton(i)

numberButton[i].setFont(new Font("Arial",Font.BOLD,20))

numberButton[i].addActionListener(handleDigit)

}

operationButton=new OperationButton[4]

handleOperation=new HandleOperation(list,resultShow,

showComputerProcess,saveComputerProcess)

String 运算符号[]={"+","-","*","/"}

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

operationButton[i]=new OperationButton(运算符号[i])

operationButton[i].setFont(new Font("Arial",Font.BOLD,20))

operationButton[i].addActionListener(handleOperation)

}

小数点操作=new JButton(".")

handleDot=new HandleDot(list,resultShow,showComputerProcess)

小数点操作.addActionListener(handleDot)

正负号操作=new JButton("+/-")

handlePOrN=new HandlePOrN(list,resultShow,showComputerProcess)

正负号操作.addActionListener(handlePOrN)

等号操作=new JButton("=")

handleEquality=new HandleEquality(list,resultShow,

showComputerProcess,saveComputerProcess)

等号操作.addActionListener(handleEquality)

sin=new JButton("sin")

handleSin=new HandleSin(list,resultShow,

showComputerProcess,saveComputerProcess)

sin.addActionListener(handleSin)

退格操作=new JButton("退格")

handleBack=new HandleBack(list,resultShow,showComputerProcess)

退格操作.addActionListener(handleBack)

清零操作=new JButton("C")

handleClear=new HandleClear(list,resultShow,showComputerProcess)

清零操作.addActionListener(handleClear)

清零操作.setForeground(Color.red)

退格操作.setForeground(Color.red)

等号操作.setForeground(Color.red)

sin.setForeground(Color.blue)

正负号操作.setForeground(Color.blue)

小数点操作.setForeground(Color.blue)

panelLeft=new JPanel()

panelRight=new JPanel()

panelLeft.setLayout(new BorderLayout())

JPanel centerInLeft=new JPanel()

panelLeft.add(resultShow,BorderLayout.NORTH)

panelLeft.add(centerInLeft,BorderLayout.CENTER)

centerInLeft.setLayout(new GridLayout(4,5))

centerInLeft.add(numberButton[1])

centerInLeft.add(numberButton[2])

centerInLeft.add(numberButton[3])

centerInLeft.add(operationButton[0])

centerInLeft.add(清零操作)

centerInLeft.add(numberButton[4])

centerInLeft.add(numberButton[5])

centerInLeft.add(numberButton[6])

centerInLeft.add(operationButton[1])

centerInLeft.add(退格操作)

centerInLeft.add(numberButton[7])

centerInLeft.add(numberButton[8])

centerInLeft.add(numberButton[9])

centerInLeft.add(operationButton[2])

centerInLeft.add(sin)

centerInLeft.add(numberButton[0])

centerInLeft.add(正负号操作)

centerInLeft.add(小数点操作)

centerInLeft.add(operationButton[3])

centerInLeft.add(等号操作)

panelRight.setLayout(new BorderLayout())

panelRight.add(showComputerProcess,BorderLayout.NORTH)

saveButton=new JButton("保存")

copyButton=new JButton("复制")

clearButton=new JButton("清除")

saveButton.setToolTipText("保存计算过程到文件")

copyButton.setToolTipText("复制选中的计算过程")

clearButton.setToolTipText("清除计算过程")

saveButton.addActionListener(this)

copyButton.addActionListener(this)

clearButton.addActionListener(this)

panelRight.add(new JScrollPane(saveComputerProcess),BorderLayout.CENTER)

JPanel southInPanelRight=new JPanel()

southInPanelRight.add(saveButton)

southInPanelRight.add(copyButton)

southInPanelRight.add(clearButton)

panelRight.add(southInPanelRight,BorderLayout.SOUTH)

JSplitPane split=new JSplitPane

(JSplitPane.HORIZONTAL_SPLIT,panelLeft,panelRight)

add(split,BorderLayout.CENTER)

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

setVisible(true)

setBounds(100,50,528,258)

validate()

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==copyButton)

saveComputerProcess.copy()

if(e.getSource()==clearButton)

saveComputerProcess.setText(null)

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

JFileChooser chooser=new JFileChooser()

int state=chooser.showSaveDialog(null)

File file=chooser.getSelectedFile()

if(file!=null&&state==JFileChooser.APPROVE_OPTION){

try{ String content=saveComputerProcess.getText()

StringReader read=new StringReader(content)

BufferedReader in= new BufferedReader(read)

FileWriter outOne=new FileWriter(file)

BufferedWriter out= new BufferedWriter(outOne)

String str=null

while((str=in.readLine())!=null){

out.write(str)

out.newLine()

}

in.close()

out.close()

}

catch(IOException e1){}

}

}

}

public static void main(String args[]){

new CalculatorWindow()

}

}

import java.awt.*

import java.awt.event.*

import javax.swing.*//导包

class MyClass extends JFrame

//创建一个MyClass类继承JFrame框架的窗口类,

//也就是说JFrame里有的功能MyClass都能实现

{

JLabel a1=new JLabel("第一个数")

//创建一个显示“第一个数”的标签

JLabel a2=new JLabel("第二个数")

JLabel a3=new JLabel("运算结果")

JTextField b1=new JTextField(5)

//创建一个文本框、默认长度为5,用来输入运算数字,当然也可以默认为空

JTextField b2=new JTextField(5)

JTextField b3=new JTextField(5)

//创建一个用于显示运算结果的标签,也可以创建一个标签来显示

JButton a=new JButton("加")

//创建一个用于加法计算的按钮,点击时进行加法运算

JButton b=new JButton("减")

JButton c=new JButton("乘")

JButton d=new JButton("除")

JPanel jp1=new JPanel()//创建一个面板,用来放控件

JPanel jp2=new JPanel()

JPanel jp3=new JPanel()

MyClass()//构造函数,用来初始化的

{

setLayout(new GridLayout(3,1))//添加一个四行四列的布局管理器

jp1.setLayout(new FlowLayout())//设置JP1面板为流式布局管理器

jp1.setLayout(new FlowLayout())

//将a1,b1,a2,b2四个控件添加到jp1面板中

jp1.add(a1)

jp1.add(b1)

jp1.add(a2)

jp1.add(b2)

jp1.add(a3)

//将a,b,c,d四个控件添加到jp2面板中

jp2.add(a)

jp2.add(b)

jp2.add(c)

jp2.add(d)

jp3.add(a3)

jp3.add(b3)

//将jp1,jp2,jp3三个面板添加到窗口中

add(jp1)

add(jp3)

add(jp2)

Object e

a.addActionListener(new ActionListener()

//创建一个匿名的事件监听器

{

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

double x=Double.valueOf(b1.getText().toString())

//获取第一个输入数,并将其由String型转换成double型

double y=Double.valueOf(b2.getText().toString())

//获取第二个输入数,并将其由String型转换成double型

b3.setText(""+(x+y))

//将运算结果在b3这个文本框中显示

}

})

b.addActionListener(new ActionListener()

{

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

double x=Double.valueOf(b1.getText().toString())

double y=Double.valueOf(b2.getText().toString())

b3.setText(""+(x-y))

}

})

c.addActionListener(new ActionListener()//创建一个匿名的事件监听器

{

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

double x=Double.valueOf(b1.getText().toString())

double y=Double.valueOf(b2.getText().toString())

b3.setText(""+(x*y))

}

})

d.addActionListener(new ActionListener()//创建一个匿名的事件监听器

{

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

double x=Double.valueOf(b1.getText().toString())

double y=Double.valueOf(b2.getText().toString())

//因为0不能做除数,所以在这里需要进行判断

if(y==0)

{

b3.setText("错误")

}

else

{

b3.setText(""+(x/y))

}

}

})

//下面的是设置窗口的属性

this.setTitle("计算器")//设置窗口的标题

//this.setSize(400,400)//设置窗口的大小,也可以改成this.pack()

this.pack()

this.setDefaultCloseOperation(DISPOSE_ON_CLOSE)//设置关闭属性

this.setVisible(true)//设置窗口的可见性

}

public static void main(String[] args)//主函数

{

new MyClass()

}

}