📄 calculator.java
字号:
//计算器
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator {
String st[]=new String[2];
boolean isDot=false,isE=false;
double num[]={0,0};
int flag=0;
int state=-1;
JMenuBar mb=new JMenuBar();
JMenu []m=new JMenu[4];
JMenuItem m1=new JMenuItem("退出");
JMenuItem m2[]=new JMenuItem[2];
JMenu m3[]=new JMenu[5];
JMenuItem mi3[][]=new JMenuItem[5][5];
JMenuItem m4=new JMenuItem("关于...");
JButton b1[]=new JButton[10];
JButton b2[]=new JButton[5];
JButton b4[]=new JButton[3];
JButton b3[]=new JButton[5];
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p[]=new JPanel[3];
JTextField t=new JTextField("0.",20);
JFrame f=new JFrame("计算器v0.9 by DOU");
public Calculator() {
for(int i=0;i<3;i++)
p[i]=new JPanel();
for(int i=0;i<10;i++)
b1[i]=new JButton(" "+Integer.toString(i)+" ");
b2[0]=new JButton(" + ");
b2[1]=new JButton(" - ");
b2[2]=new JButton(" * ");
b2[3]=new JButton(" / ");
b2[4]=new JButton(" = ");
b3[0]=new JButton("+/-");
b3[1]=new JButton(" . ");
b3[2]=new JButton("sqrt");
b3[3]=new JButton("1/x");
b3[4]=new JButton(" % ");
b4[0]=new JButton("Backspace");
b4[1]=new JButton("CE");
b4[2]=new JButton("C");
}
protected void Menu(){
String []str={"文件(F)","编辑(E)","常数(C)","帮助(H)"};
char []ca={'F','E','C','H'};
char []ca1={'C','V'};
for(int i=0;i<4;i++){
m[i]=new JMenu(str[i]);
m[i].setMnemonic(ca[i]);
mb.add(m[i]);
}
String []str1={"复制","粘贴"};
for(int i=0;i<2;i++){
m2[i]=new JMenuItem(str1[i]);
m2[i].addActionListener(new menuAction());
m2[i].setMnemonic(ca1[i]);
m2[i].setAccelerator(KeyStroke.getKeyStroke(ca1[i],java.awt.Event.CTRL_MASK,false));
m[1].add(m2[i]);
}
String []str2={"数学","电磁学","原子和核物理","热力学","万有引力"};
String [][]str3={{"π","欧拉常数e","黄金比例"},{"光速","元电荷e","真空阻抗"},{"普朗克常数"},{"玻尔兹曼常数","原子质量单位","摩尔气体常数","阿伏伽德罗数"},{"万有引力常数G","重力加速度g"}};
for(int i=0;i<5;i++){
m3[i]=new JMenu(str2[i]);
for(int j=0;j<5;j++){
try{
mi3[i][j]=new JMenuItem(str3[i][j]);
mi3[i][j].addActionListener(new menuAction());
m3[i].add(mi3[i][j]);
}catch(ArrayIndexOutOfBoundsException e){
break;
}
}
m[2].add(m3[i]);
}
m1.setMnemonic('Q');
m1.setAccelerator(KeyStroke.getKeyStroke('Q',java.awt.Event.CTRL_MASK,false));
m1.addActionListener(new menuAction());
m[0].add(m1);
m[3].add(m4);
}
protected void Action(){
for(int i=0;i<10;i++)
b1[i].addActionListener(new numAction());
for(int i=0;i<5;i++)
b2[i].addActionListener(new calAction());
for(int i=0;i<5;i++)
b3[i].addActionListener(new speAction());
for(int i=0;i<3;i++)
b4[i].addActionListener(new speAction());
for(int i=0;i<3;i++)
p[i].addKeyListener(new keyhandle());
p1.addKeyListener(new keyhandle());
p2.addKeyListener(new keyhandle());
f.addKeyListener(new keyhandle());
}
public void go(){
st[0]="";st[1]="";
t.setFocusable(false);
p1.setLayout(new FlowLayout());
p1.add(t);
p[0].setLayout(new FlowLayout());
for(int i=0;i<3;i++)
p[0].add(b4[i]);
t.applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
p[1].applyComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
p[1].setLayout(new GridLayout(4,3,3,3));
for(int i=9;i>=0;i--)
p[1].add(b1[i]);
p[1].add(b3[1]);p[1].add(b3[0]);p[1].add(b1[0]);
p[2].setLayout(new GridLayout(4,2,3,3));
p[2].add(b2[3]);p[2].add(b3[2]);p[2].add(b2[2]);p[2].add(b3[4]);p[2].add(b2[1]);p[2].add(b3[3]);p[2].add(b2[0]);p[2].add(b2[4]);
p2.setLayout(new BorderLayout(3,3));
p2.add(p[0],BorderLayout.NORTH);
p2.add(p[1],BorderLayout.CENTER);
p2.add(p[2],BorderLayout.EAST);
Action();
Menu();
f.setJMenuBar(mb);
f.setLayout(new BorderLayout(3,3));
f.add(p1,BorderLayout.NORTH);
f.add(p2,BorderLayout.CENTER);
f.pack();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
p1.requestFocus();
f.setResizable(false);
f.setVisible(true);
}
class calAction implements ActionListener{
public void actionPerformed(ActionEvent e){
p1.requestFocus();
flag=1;
isDot=false;
if(st[0]==""){
Toolkit.getDefaultToolkit().beep();
} else{
if(st[1]!=""&&e.getSource()!=b2[4]){
calculation(state);
}
for(int i=0;i<4;i++){
if(e.getSource()==b2[i]){
isE=false;
state=i;
break;
}
}
if(e.getSource()==b2[4]){
calculation(state);
isE=true;
}
}
}
}
class numAction implements ActionListener{
public void actionPerformed(ActionEvent e){
p1.requestFocus();
for(int i=0;i<10;i++){
if(e.getSource()==b1[i]){
addStr(i);
break;
}
}
}
}
class speAction implements ActionListener{
public void actionPerformed(ActionEvent e){
p1.requestFocus();
if(e.getSource()==b4[2])
reset();
if(e.getSource()==b4[0])
backspace();
if(e.getSource()==b4[1])
JOptionPane.showMessageDialog(null,"不知这按钮跟\"C\"按钮有什么区别,所以不做事件");
if(e.getSource()==b3[1])
dot();
else{
for(int i=0;i<5;i++){
if(e.getSource()==b3[i]){
changeNum(i);
break;
}
}
}
}
public void changeNum(int a){
if(a==0){
if(st[1]!=""){
isE=true;
num[1]=num[1]*-1;
st[1]=String.valueOf(num[1]);
t.setText(st[1]);
}else {
if(st[0]==""){
Toolkit.getDefaultToolkit().beep();
}else{
isE=true;
num[0]=num[0]*-1;
st[0]=String.valueOf(num[0]);
t.setText(st[0]);
}
}
}
if(a==2){
if(st[1]!=""){
if(num[1]>=0){
isE=true;
num[1]=Math.sqrt(num[1]);
st[1]=String.valueOf(num[1]);
t.setText(st[1]);
}else Toolkit.getDefaultToolkit().beep();
}else {
if(st[0]==""){
Toolkit.getDefaultToolkit().beep();
}else{
if(num[0]>=0){
isE=true;
num[0]=Math.sqrt(num[0]);
st[0]=String.valueOf(num[0]);
t.setText(st[0]);
}else
Toolkit.getDefaultToolkit().beep();
}
}
}
if(a==3){
if(st[1]!=""){
if(num[1]!=0){
isE=true;
num[1]=1/num[1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -