import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.LinkedList;
import java.io.*;
import javax.swing.border.*;
public class CalculatorWindow extends JFrame implements ActionListener{
NumberButton numberButton[];
OperationButton operationButton[];
JButton dot,p_n,back,equality,clear,sin;
JTextField showResult,showComputerProcess;
JTextArea saveComputerProcess;
JButton saveButton,copyButton,clearButton;
LinkedList<String> list;
HandleDigit handleDigit;
HandleOperation handleOperation;
HandleBack handleBack;
HandleClear handleClear;
HandleEquality handleEquality;
HandleDot handleDot;
HandlePorN handlePorN;
HandleSin handleSin;
public CalculatorWindow()
{
setTitle("计算器");
JPanel panelLeft,panelRight;
list=new LinkedList<String>();
showResult=new JTextField(10);
showResult.setHorizontalAlignment(JTextField.RIGHT);
showResult.setForeground(Color.blue);
showResult.setFont(new Font("TimesRoman",Font.BOLD,16));
showResult.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));/////////////
showResult.setEditable(false);
showResult.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,showResult,showComputerProcess);
for(int i=0;i<=9;i++)
{
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,showResult,showComputerProcess,saveComputerProcess);
String sign[]={"+","-","*","/"};
for(int i=0;i<4;i++)
{
operationButton[i]=new OperationButton(sign[i]);
operationButton[i].setFont(new Font("Arial",Font.BOLD,20));
operationButton[i].addActionListener(handleOperation);
}
dot=new JButton(".");
handleDot=new HandleDot(list,showResult,showComputerProcess);
dot.addActionListener(handleDot);
p_n=new JButton("+/-");
handlePorN=new HandlePorN(list,showResult,showComputerProcess);
p_n.addActionListener(handlePorN);
equality=new JButton("=");
handleEquality=new HandleEquality(list,showResult,showComputerProcess,saveComputerProcess);
equality.addActionListener(handleEquality);
sin=new JButton("sin");
handleSin=new HandleSin(list,showResult,showComputerProcess,saveComputerProcess);
sin.addActionListener(handleSin);
back=new JButton("←");
handleBack=new HandleBack(list,showResult,showComputerProcess);
back.addActionListener(handleBack);
clear=new JButton("C");
handleClear=new HandleClear(list,showResult,showComputerProcess);
clear.addActionListener(handleClear);
clear.setForeground(Color.red);
back.setForeground(Color.red);
equality.setForeground(Color.red);
sin.setForeground(Color.blue);
p_n.setForeground(Color.blue);
dot.setForeground(Color.blue);
panelLeft=new JPanel();
panelRight=new JPanel();
panelLeft.setLayout(new BorderLayout());
JPanel centerInLeft=new JPanel();
panelLeft.add(showResult,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(clear);
centerInLeft.add(numberButton[4]);
centerInLeft.add(numberButton[5]);
centerInLeft.add(numberButton[6]);
centerInLeft.add(operationButton[1]);
centerInLeft.add(back);
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(p_n);
centerInLeft.add(dot);
centerInLeft.add(operationButton[3]);
centerInLeft.add(equality);
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();
}
}
catch(IOException e1){}////////////////////
}
}
}
public static void main(String[] args) {
new CalculatorWindow();
}
}
评论2
最新资源