package Calcuator;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//进行界面显示并添加监听
public class Calcuator extends JFrame implements ActionListener {
//创建用于输入的文本框
TextArea text=new TextArea("",2,10,TextArea.SCROLLBARS_HORIZONTAL_ONLY);
//卡片布局模板及其控制按钮的创建
JPanel CardPanel=new JPanel();
CardLayout cards=new CardLayout();
JButton record=new JButton("历史记录");
JButton mermory=new JButton(" 内存 ");
String ReSetrecordArea="历史记录\n三角函数默认以角度制进行计算";
TextArea recordArea = new TextArea(ReSetrecordArea,37,26);
TextArea mermoryArea = new TextArea("内存",37,26);
//存储运算过程
String mathPast= "";//用于存储过去的运算过程
String mathNow = "";//用于存储现在的运算过程
String showNow="";
//创建存储变量
private String m;
private String result="";
String temp="";//用于暂时保留数字
//用于判断是否需要清空mathNow进行新的运算
private int equal_flag=0;
//存储三角函数计算的方式,0为角度制,1为弧度制
private int TrigCalculMethod=0;
//创建x的平方,x的三次方,x的y次方,x开y次方按钮
ImageIcon squareimg = new ImageIcon("src\\Calcuator\\x的平方.png");// 创建图片对象
ImageIcon cubeimg = new ImageIcon("src\\Calcuator\\x的三次方.png");// 创建图片对象
ImageIcon powerimg = new ImageIcon("src\\Calcuator\\x的y次方.png");// 创建图片对象
ImageIcon readicationimg = new ImageIcon("src\\Calcuator\\x开y次方.png");// 创建图片对象
Image squareimage = squareimg.getImage();
Image cubeimage = cubeimg.getImage();
Image powerimage = powerimg.getImage();
Image readicationimage = readicationimg.getImage();
//为把它缩小点,先要取出这个Icon的image ,然后缩放到合适的大小
Image squaresmallImage = squareimage.getScaledInstance(25,25,Image.SCALE_FAST);
Image cubesmallImage = cubeimage.getScaledInstance(25,25,Image.SCALE_FAST);
Image powersmallImage = powerimage.getScaledInstance(25,25,Image.SCALE_FAST);
Image readictionsmallImage = readicationimage.getScaledInstance(30,30,Image.SCALE_FAST);
//再由修改后的Image来生成合适的Icon;
//***Image对象创建ImageIcon对象,可查阅ImageIcon的构造方法***
ImageIcon smallIcon = new ImageIcon(squaresmallImage);
ImageIcon cmallIcon = new ImageIcon(cubesmallImage);
ImageIcon pmallIcon = new ImageIcon(powersmallImage);
ImageIcon rmallIcon = new ImageIcon(readictionsmallImage);
JButton squarebuttion=new JButton(smallIcon);
JButton cubebuttion=new JButton(cmallIcon);
JButton powerbuttion=new JButton(pmallIcon);
JButton readictionbuttion=new JButton(rmallIcon);
public Calcuator (){
super("计算器");
this.setBounds(400, 250, 900, 680);
//设置窗体图片
// this.setIconImage(walkpaperimage);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体的布局形式
GridBagLayout gr=new GridBagLayout();
GridBagConstraints gc=new GridBagConstraints();
//设置窗体布局
this.setLayout(gr);
//创建模板
JPanel jp1 = createPanel1();
JPanel jp2 = createPanel2();
//对整个窗体进行网格包布局 jp1,jp4
gc.weightx=90;gc.weighty=68;gc.fill=GridBagConstraints.BOTH;
gc.gridwidth=7;gc.gridheight=10;
gc.gridx=0;gc.gridy=0;
gr.setConstraints(jp1,gc);
this.add(jp1);
gc.gridwidth=3;gc.gridheight=10;
gc.gridx=7;gc.gridy=0;
gr.setConstraints(jp2,gc);
this.add(jp2);
this.setVisible(true);
}
private JPanel createPanel1(){
//总的面板
JPanel panel = new JPanel();
JPanel keyPanel=new JPanel();
//设置每个面板的布局
panel.setLayout(new BorderLayout());
keyPanel.setLayout(new GridLayout(6,7,2,2) );
//实例化按钮监听对象
ButtonAction ba = new ButtonAction();
JButton[][] button = new JButton[][]{
{
new JButton("(") ,new JButton(")"),new JButton("1/X"),
new JButton("mc"),new JButton("m+"),new JButton("m-"),
new JButton("mr"),
},
{
squarebuttion,cubebuttion,powerbuttion,
new JButton("C"),new JButton("/"),new JButton("*"),
new JButton("ms"),
},
{ new JButton("X!"), new JButton("√"), readictionbuttion,
new JButton("7"), new JButton("8"), new JButton("9"),
new JButton("←"),
},
{
new JButton("e"), new JButton("ln"), new JButton("log"),
new JButton("4"), new JButton("5"), new JButton("6"),
new JButton("-"),
},
{
new JButton("sin"), new JButton("cos"), new JButton("tan"),
new JButton("1"), new JButton("2"), new JButton("3"),
new JButton("+"),
},
{
new JButton("Deg"), new JButton("|x|"), new JButton("π"),
new JButton("%"), new JButton("0"), new JButton("."),
new JButton("="),
}
};
//设置文本框的字体
Font font = new Font("仿宋",Font.ROMAN_BASELINE, 56);
text.setFont(font);
text.setEditable(false);
panel.setLayout(new BorderLayout());
Font keyfont = new Font("Dialog",Font.BOLD, 14);
for (int i=0;i<6;i++)
for(int j=0;j<7;j++) {
if(j<3)
button[i][j].setFont(keyfont);
// //*新增,设置按键为透明
// button[i][j].setOpaque(false);
//
keyPanel.add(button[i][j]);
}
panel.add("North",text);
panel.add("Center",keyPanel);
//
for (int i = 0; i < 6; i++)
for (int j = 0; j < 7; j++) {
button[i][j].addActionListener(ba);
}
button[5][0].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String input =e.getActionCommand();
if (input.equals("Deg")){
button[5][0].setText("Rad");
TrigCalculMethod=1;}
else
if (input.equals("Rad")){
button[5][0].setText("Deg");
TrigCalculMethod=0;
}
}
});
return panel;
}
private JPanel createPanel2(){
JPanel panel1 = new JPanel();
//按钮面板
JPanel panel2=new JPanel();
CardPanel.setBackground(Color.pink);
panel1.setLayout(new BorderLayout());
panel2.add(record);panel2.add(mermory);
panel1.add("North",panel2);
panel1.add("Center",CardPanel);
//设置历史记录框和保存框的字体
Font font1 = new Font("Verdana",Font.ROMAN_BASELINE,12);
recordArea.setFont(font1);
mermoryArea.setFont(font1);
recordArea.setEditable(false);
mermoryArea.setEditable(false);
CardPanel.setLayout(cards);
recordArea.setBackground(Color.gray);
mermoryArea.setBackground(Color.gray);
CardPanel.add(recordArea, "card1");
CardPanel.add(mermoryArea, "card2");
record.addActionListener((ActionListener) this);
mermory.addActionListener((ActionListener) this);
return panel1;