package sa;
public class CalculateMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calculate calcluate=new Calculate();
}
}
Calculate.java:
package sa;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import javax.swing.*;
import java.math.*;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Stack;
import java.util.Queue;
public class Calculate extends JFrame{
public JTextField resulttext;
public JTextField textField1;
public JTextField textField;
public JTextField textField2;
public JTextArea textArea;
double num=0.0;
public Calculate() {
super("swing");
CalculateController calculate=new CalculateController();
textField = new JTextField("0", 13);
textField.setBackground(Color.WHITE);
textField.setHorizontalAlignment(JTextField.RIGHT);
textField.setEditable(false);
textField1 = new JTextField("0", 6);
textField1.setBackground(Color.WHITE);
textField1.setHorizontalAlignment(JTextField.RIGHT);
textField1.setEditable(false);
textField2 = new JTextField("0", 13);
textField2.setBackground(Color.WHITE);
textField2.setHorizontalAlignment(JTextField.RIGHT);
textField2.setEditable(false);
JPanel viewPanel = new JPanel();
viewPanel.add(textField);
viewPanel.add(textField1);
viewPanel.add(textField2);
JPanel panel = new JPanel();
String[][] names = {{"1", "2", "3", "/", "c"}, {"4", "5", "6", "*", "�˸�"}, {"7", "8", "9", "-", "sqrt"}, {"0", "+/-", ".", "+", "="}};
JPanel buttonPanel = new JPanel();
JButton[][] buttons = new JButton[4][5];
final GridLayout gridLayout = new GridLayout(4, 0);
gridLayout.setHgap(10);
gridLayout.setVgap(10);
buttonPanel.setLayout(gridLayout);
//һ�� ѭ���ź��������ֺ���������
for (int row = 0; row < names.length; row++) {
for (int col = 0; col < names.length + 1; col++) {
buttons[row][col] = new JButton(names[row][col]);
buttonPanel.add(buttons[row][col]);
buttons[row][col].addActionListener(calculate);
}
}
panel.setLayout(new BorderLayout());
panel.add(viewPanel, BorderLayout.NORTH);
panel.add(buttonPanel, BorderLayout.CENTER);
final JLabel leftLabel = new JLabel();
leftLabel.setPreferredSize(new Dimension(10, 0));
panel.add(leftLabel, BorderLayout.WEST);
final JLabel rightLabel = new JLabel();
rightLabel.setPreferredSize(new Dimension(10, 0));
panel.add(rightLabel, BorderLayout.EAST);
getContentPane().add(panel, BorderLayout.WEST);
final JPanel panelx = new JPanel();
panelx.setLayout(new BorderLayout());
getContentPane().add(panelx, BorderLayout.CENTER);
final JPanel viewPanel1 = new JPanel();
panelx.add(viewPanel1, BorderLayout.NORTH);
this.resulttext = new JTextField("0");
resulttext.setEditable(false);
resulttext.setHorizontalAlignment(SwingConstants.CENTER);
resulttext.setColumns(18);
viewPanel1.add(resulttext);
this.textArea = new JTextArea();
textArea.setColumns(15);
textArea.setRows(4);
textArea.setLineWrap(true);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(textArea);
panelx.add(scrollPane, BorderLayout.CENTER);
final JPanel buttonPanel1 = new JPanel();
panelx.add(buttonPanel1, BorderLayout.SOUTH);
final JButton aButton = new JButton();
aButton.setText("保存");
aButton.addActionListener(calculate);
buttonPanel1.add(aButton);
final JButton bButton = new JButton();
bButton.setText("查看");
bButton.addActionListener(calculate);
buttonPanel1.add(bButton);
final JButton cButton = new JButton();
cButton.setText("清除");
cButton.addActionListener(calculate);
buttonPanel1.add(cButton);
pack();
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
CalculateController.java:
package sa;
import java.awt.event.ActionEvent;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class CalculateController implements java.awt.event.ActionListener{
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
/*��������*/
String s = (e.getActionCommand());
JButton str = (JButton) e.getSource();
CalculateModel model=new CalculateModel();
Calculate cal=new Calculate();
/*���˼�*/
if(s.equals("退格")) {
if (cal.textField2.getText().equals(""))
model.pressBackspace1();
else model.pressBackspace2();
}
/*清0键*/
if(s.equals("C")) {
cal.resulttext.setText("0");
cal.textField.setText("0");
cal.textField1.setText("0");
cal.textField2.setText("0");
model.optionValue=0;//表示运算符的变量设置为0
model.newDigital=true;//表示是否新输入的数的标志设置为true
}
/*数字键*/
if("0123456789.".contains(s)) {
if(cal.textField1.getText().equals("0")) {
if(model.newDigital) {
cal.textField.setText(s);
}else if(s.equals(".")&&(!cal.textField.getText().contains("."))) {
cal.textField.setText(cal.textField.getText()+".");
}else if(!s.equals(".")) {
cal.textField.setText(cal.textField.getText()+s);
}
model.newDigital=false;
}
else {
if(model.newDigital) {
cal.textField2.setText(s);
}else if(s.equals(".")&&(!cal.textField2.getText().contains("."))) {
cal.textField2.setText(cal.textField2.getText()+".");
}else if(!s.equals(".")) {
cal.textField2.setText(cal.textField2.getText()+s);
}
model.newDigital=false;
}
}
/* 表示数字正负符号+/- */
if(s.equals("+/-")) {
Double d=Double.parseDouble(s.trim());//获取输入的数字
cal.resulttext.setText(String.valueOf(-d));//取得获取输入数字的相反数
}
//////////////////////////////////////////////////////加减乘除运算的实现/////////////////////////////////////////////////////////
if(s.equals("+")) {
model.d1=Double.parseDouble(cal.textField.getText());//立刻获取前操作数的值
cal.textField1.setText("+");
model.optionValue=1;//设置运算符标志
}
if(s.equals("-")) {
model.d1=Double.parseDouble(cal.textField.getText());
cal.textField1.setText("-");
model.optionValue=2;
}
if(s.equals("*")) {
model.d1=Double.parseDouble(cal.textField.getText());
cal.textField1.setText("*");
model.optionValue=3;
}
if(s.equals("/")) {
model.d1=Double.parseDouble(cal.textField.getText());
cal.textField1.setText("/");
model.optionValue=4;
}
if(s.equals("=")) {
model.sx();
/*根据运算符标志的不同值确定计算结果*/
}
////////////////////////////////求平方根/////////////////////////////////
if(s.equals("sqrt")) {
double e1=Double.parseDouble(cal.textField.getText().trim());//获取操作数的值
if(e1>0) {
cal.resulttext.setText(String.valueOf(Math.sqrt(e1)));//计算该值的平方根
}else {
cal.resulttext.setText("负数不能计算平方根");
}
}
if(s.equals("清除")) { //点击“清除”按键*******
cal.textArea.setText("");
}else if(s.equals("保存")){ //点击“保存”**********
String stx=cal.textArea.getText();
try {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\result.txt"));
osw.write(s);
osw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}else if(s.equals("查看")){ //点击“查看”*********
char[] chs = new char[2048];
try {
InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\result.txt"));
int len;
while ((len = isr.read(chs))!=-1){
cal.textArea.append(String.valueOf(chs));
}
isr.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
CalculateModel.java:
package sa;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class CalculateModel {
public boolean newDigital = true;//����ȫ��boolean���� ���ڱ�ʾ�Ƿ����������ı�־
public String operation = "";//��ʾ��������ַ���
public double d1;//��Ԫ����ǰ����
public double d2;//��Ԫ����������
public int optionValue;
public double num=0.0;
Calculate cal=new Calculate();
public void pressBackspace1() {//处理当按下C键时,第一个文本框输入的数字回退一位//
String text=cal.textField.getText();
int i=text.length();
if(i>0) {
text=text.substring(0, i-1);
if(text.length()==0) {
cal.textField.setText("");
newDigital=true;
}else cal.textField.setText(text);
}
}
public void pressBackspace2() {//处理当按下C键时,第二个文本框输入的数字回退一位//
String text=cal.textField2.getText();
int i=text.length();
if(i>0) {
text=text.substring(0, i-1);
if(text.length()==0) {
cal.textField2.setText("");
newDigital=true;
}else cal.textField2.setText(text);
}
}
public void sx() {
d2=Double.parseDouble(cal.textField2.getText());//获取后操作数的值
/*根据运算符标志的不同值确定计算结果*/
switch(optionValue) {
case 1:
num=d1+d2;
break;
case 2:
cal.resulttext.setText(String.valueOf(d1-d2));
break;
case 3:
cal.resulttext.setText(String.valueOf(d1*d2));
break;
case 4:
if(d2!=0) {
cal.resulttext.setText(String.valueOf(d1/d2));
}else {
cal.resulttext.setText("除数不能为0");
}
break;
}
operation="";//运算结束 清空运算符
cal.resulttext.setText(String.valueOf(num));
String a=cal.textField.getText();
String b=cal.textField1.getText();
String c=cal.textField2.getText();
String str1=a+b+c+"="+String.valueOf(num);
cal.textArea.append(str1);
}
}
运行后,点一个按钮,界面就会跳一下,并且第二个文本框的数字直接覆盖第一个文本框的数字