package 计算器;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
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.border.EmptyBorder;
public class Cal {
public static void main(String[] args) {
// TODO Auto-generated method stub
new CalFrame();
}
}
class CalFrame extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
JPanel jp2;
JLabel jLabel;
String d1String=null,d2String=null,opString=null,memString=null;
private final String addString="+";
private final String minusString="-";
private final String mutiString="x";
private final String diverString="/";
public CalFrame() {
ActionListener a1,a2;
a1=(ActionListener) new CalAction1();
a2=(ActionListener) new CalAction2();
setLayout(new BorderLayout());
//jp1=new JPanel();
jLabel=new JLabel("0",JLabel.RIGHT);//字符靠右,不好用panel
jLabel.setBorder(new EmptyBorder(5, 5, 5, 5)); // 设置边距,最后的5是右边距
//add(jLabel);
jp2=new JPanel();
jp2.setLayout(new GridLayout(5,4));
jp2.add(addButton("7", a1));
jp2.add(addButton("8", a1));
jp2.add(addButton("9", a1));
jp2.add(addButton(addString, a2));
jp2.add(addButton("4", a1));
jp2.add(addButton("5", a1));
jp2.add(addButton("6", a1));
jp2.add(addButton(minusString, a2));
jp2.add(addButton("1", a1));
jp2.add(addButton("2", a1));
jp2.add(addButton("3", a1));
jp2.add(addButton(mutiString, a2));
jp2.add(addButton("0", a1));
jp2.add(addButton(".", a1));
jp2.add(addButton("计算", a2));
jp2.add(addButton(diverString, a2));
jp2.add(addButton("清除", a2));
jp2.add(addButton("退格", a2));
jp2.add(addButton("记忆", a2));
jp2.add(addButton("取出", a2));
add(BorderLayout.NORTH,jLabel);
add(BorderLayout.CENTER,jp2);
int width=320;
int height=226;
setSize(width,height);
Toolkit tk =Toolkit.getDefaultToolkit();
Dimension dm=tk.getScreenSize();
setLocation((dm.width-width)/2,(dm.height-height)/2);
setTitle("计算器");
setVisible(true);
setResizable(false);//禁止改变大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private JButton addButton(String title,ActionListener a1) {
JButton jButton=new JButton(title);
jButton.setSize(20,50);
jButton.addActionListener(a1);
return jButton;
}
class CalAction1 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String numString=((JButton)e.getSource()).getText();
if(opString==null) {
if(d1String==null) {
d1String=numString;
}
else {
if(numString==".") {
if(d1String.indexOf('.')==-1)
d1String=d1String+numString;
}
else
{
if(d1String=="0")
d1String=numString;
else
d1String=d1String+numString;
}
}
if(d1String!=null)
{
jLabel.setText(d1String);
}
else {
jLabel.setText("0");
}
}
else {
if(d2String==null) {
d2String=numString;
}
else {
if(numString==".") {
if(d2String.indexOf('.')==-1)
d2String=d2String+numString;
}
else
{
if(d2String=="0")
d2String=numString;
else
d2String=d2String+numString;
}
}
if(d2String!=null)
jLabel.setText(d2String);
else
jLabel.setText("0");
}
}
}
class CalAction2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String op2=((JButton)e.getSource()).getText();
if(op2=="清除") {
jLabel.setText("0");
d1String=null;
d2String=null;
opString=null;
}
else if(op2=="退格") {
if(d2String!=null) {
d2String=d2String.substring(0, d2String.length()-1);
if(d2String.length()>0)
jLabel.setText(d2String);
else {
jLabel.setText(opString);
d2String=null;
}
}
else if(opString!=null) {
jLabel.setText(d1String);
opString=null;
}
else if(d1String!=null) {
d1String=d1String.substring(0, d1String.length()-1);
if(d1String.length()>0)
jLabel.setText(d1String);
else {
jLabel.setText("0");
d1String=null;
}
}
}
else if(op2=="记忆") {
memString=jLabel.getText();
}
else if(op2=="取出") {
if(memString!=null) {
if(d1String==null || opString==null) {
d1String=memString;
jLabel.setText(d1String);
}
else if(d2String==null &&opString!=null) {
d2String=memString;
jLabel.setText(d2String);
}
}
}
else if(op2=="计算") {
yunsuan();
}
else if(d1String!="."){ //加减乘除,操作数只有一个.不是数字
if(d2String!=null) //第二个操作数有了,没有按运算按钮按了加减乘除按钮
yunsuan();
opString=op2;
jLabel.setText(opString);
}
}
private void yunsuan() {
// TODO Auto-generated method stub
if(d1String!=null&&d2String!=null&&opString!=null&&d2String!=".") {
double d1= Double.parseDouble(d1String);
double d2= Double.parseDouble(d2String);
double r=0;
switch (opString) {
case addString: {
r=d1+d2;
break;
}
case minusString: {
r=d1-d2;
break;
}
case mutiString: {
r=d1*d2;
break;
}
case diverString: {
if(d2!=0.0d)
{
r=d1/d2;
}
else {
return;
}
break;
}
default:
}
int i=(int)r;
if(i==r) {
d1String=Integer.toString(i);
}
else {
d1String=Double.toString(r);
}
jLabel.setText(d1String);
d2String=null;
opString=null;
}
}
}
}
