📄 calculator.java
字号:
import javax.swing.*;
import javax.swing.event.*;
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.awt.datatransfer.*;
import java.io.*;
public class Calculator extends JApplet implements ActionListener {
String X="";
String Y="";
String Op="";
String M="";
JFrame jf=new JFrame();
Container cp=jf.getContentPane();
Double Result=0.00;
boolean Ynull=true;
boolean XY=false;
boolean first=true;
int OT=1;
public String temp="0";
private JLabel jl=new JLabel("状态");
private JTextField jtf=new JTextField("0",25);
private JMenuBar jmb=new JMenuBar();
private JMenu Edit,Look,Help;
private JMenuItem EditCopy,EditPaste,Look1,Look2,HelpAbout ;
String[ ] name={"Back","CE","C","MC","7","8","9","/","sqrt","MR","4","5","6","*","%",
"MS","1","2","3","-","1/x","M+","0","+/-",".","+","="};
public Calculator() {
jf.setTitle("计算器");
jf.setLocation(450,450);
jf.setLayout(new BorderLayout());
jf.setVisible(true);
jf.setSize(600,235);
Edit=new JMenu("编辑");
EditCopy=new JMenuItem("复制");
EditCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK));
EditCopy.addActionListener(new Key());
EditPaste=new JMenuItem("粘贴");
EditPaste.addActionListener(new Key());
EditPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK));
Look=new JMenu("查看");
Look1=new JMenuItem("普通");
Look1.addActionListener(new Key());
Look1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.CTRL_MASK));
Look2=new JMenuItem("科学");
Look2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, InputEvent.CTRL_MASK));
Look2.addActionListener(new Key());
Help=new JMenu("帮助");
HelpAbout=new JMenuItem("关于");
HelpAbout.addActionListener(new Key());
HelpAbout.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK));
Edit.add(EditCopy);
Edit.add(EditPaste);
Look.add(Look1);
Look.add(Look2);
Help.add(HelpAbout);
jmb.add(Edit);
jmb.add(Look);
jmb.add(Help);
jf.setJMenuBar(jmb);
JPanel jp1=new JPanel(new BorderLayout(),true);
jtf.setEditable(false);
jtf.setHorizontalAlignment(JTextField.RIGHT);
jp1.add(jtf);
cp.add(jtf,"North");
JPanel jp2=new JPanel();
jp2.setLayout(new GridLayout(1,3));
jl.setFont(new Font("",Font.BOLD,20));
jl.setHorizontalAlignment(JLabel.CENTER);
jp2.add(jl);
for(int i=0;i<3;i++) {
makeButton(jp2,name[i]);
}
jp2.setSize(40,400);
cp. add(jp2,BorderLayout.CENTER);
JPanel jp3=new JPanel(new GridLayout(4,6),true );
for(int i=3;i<name.length;i++) {
makeButton(jp3,name[i]);
}
cp.add(jp3,BorderLayout.SOUTH);
jf.validate();
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// jf.setResizable(false);
this.add(jf);
}
public void makeButton(JPanel p,String str) {
JButton b = new JButton(str);
b.addActionListener(this);
p.add(b);
}
public void actionPerformed(ActionEvent e) {
String event=e.getActionCommand();
if(event=="0"||event=="."||event=="1"||event=="2"||event=="3"||event=="4"||event=="5"||event=="6"||event=="7"||event=="8"||event=="9") {
if(first==false) {
X="";
Y="";
Ynull=true;
first=true;
OT=1;
jtf.setText("0");
jl.setText(e.getActionCommand());
}
if(!XY) {
X+=event;
jtf.setText(X);
jl.setText("X("+X+")");
} else {
Y+=event;
jtf.setText(Y);
jl.setText("Y("+Y+")");
Ynull=false;
}
}
if(event=="*"||event=="/"||event=="+"||event=="-" ||event=="%") {
jl.setText(event);
Op=event;
XY=true;
jtf.setText(Op);
}
else if(event=="=") //=运算
{
Double x;
Double y;
if(X.isEmpty())
X=temp;
x=Double.parseDouble(X);
if(Ynull==true) {
Y=X;
}
y=Double.parseDouble(Y);
if(Op=="+") {
Result=x+y;
} else if(Op=="-") {
Result=x-y;
} else if(Op=="*") {
Result=x*y;
} else if(Op=="/") {
Result=x/y;
} else if(Op=="%") {
Result=x % y;
}
java.text.DecimalFormat myformat=new java.text.DecimalFormat("#0.000");
jtf.setText(""+myformat.format(Result));
jl.setText("X("+X+") "+Op+" Y("+Y+")="+Result );
X=Result.toString();
first=false;
Ynull=false;
temp=X;
XY=false;
}
else if(event=="sqrt") //sqrt
{
Double x=Double.parseDouble(X);
if(x>=0) {
Result=Math.sqrt(x);
java.text.DecimalFormat myformat=new java.text.DecimalFormat("#0.000");
jtf.setText(""+myformat.format(Result));
} else{
jtf.setText("开平方不能为负");
}
jl.setText("sqrt("+X+")="+Result);
X=String.valueOf(Result);
Ynull=false;
first=false;
}
else if(event=="1/x") {
Double x=Double.parseDouble(X);
if(x!=0) {
Result=1/x;
java.text.DecimalFormat myformat=new java.text.DecimalFormat("#0.000");
jtf.setText(""+myformat.format(Result));
} else {
jtf.setText("倒数不能为零");
}
jl.setText("1/x("+X+")="+Result);
X=String.valueOf(Result);
Ynull=false;
first=false;
}
else if(event=="Back") {
jl.setText("Back "+XY);
if(!XY) {
jl.setText("Back X: "+X);
if(X.length()>1) {
X=new String(X.substring(0,X.length()-1));
jtf.setText(X);
} else {
X="";
jtf.setText("0");
}
} else {
jl.setText("Back Y: "+Y);
if(Y.length()>1)
Y=new String(Y.substring(0,Y.length()-1));
else
Y="0";
jtf.setText(Y);
}
}
else if(event=="CE") {
jl.setText("CE");
X="";
Y="";
Op="";
Ynull=true;
XY=false;
first=true;
temp="0";
jtf.setText("0");
}
else if(event=="C") {
if(first==true) {
jl.setText("C");
if(!XY) {
X="";
jtf.setText("0");
} else {
Y="";
jtf.setText("0");
}
} else {
X="";
Y="";
Op="";
Ynull=true;
XY=false;
first=true;
jtf.setText("0");
}
} else if(event=="MR") {
jtf.setText(M);
jl.setText("MR");
} else if(event=="MC") {
jl.setText("MC("+M+")");
jtf.setText("0");
M="";
} else if(event=="MS") {
M=jtf.getText();
jl.setText("MS("+M+")");
} else if(event=="M+") {
Double m1=Double.parseDouble(jtf.getText());
Double m2=Double.parseDouble(M);
M=String.valueOf(m1+m2);
jl.setText("M+("+m1+")");
} else if(event=="+/-") {
if(first==true) {
if(!XY) //对X操作
{
String fuhao="";
fuhao=X.substring(0,1);
if(OT%2==1) //变负
{
jl.setText("-X :");
if(!fuhao.endsWith("-")) {
X="-"+X;
}
} else //变正
{
jl.setText("+X :");
if(fuhao.endsWith("-")) {
X=X.substring(1,X.length());
}
}
jtf.setText(X);
} else {
String fuhao="";
fuhao=Y.substring(0,1);
if(OT%2==1) //变负
{
jl.setText("-Y :");
if(!fuhao.endsWith("-")) {
Y="-"+Y;
}
} else //变正
{
jl.setText("+Y :");
if(fuhao.endsWith("-")) {
Y=Y.substring(1,Y.length());
}
}
jtf.setText(Y);
}
} else {
String fuhao="";
fuhao=X.substring(0,1);
if(OT%2==1) //变负
{
jl.setText("-X :");
if(!fuhao.endsWith("-")) {
X="-"+X;
}
} else //变正
{
jl.setText("+X :");
if(fuhao.endsWith("-")) {
X=X.substring(1,X.length());
}
}
jtf.setText(X);
}
OT++;
}
}
class Key implements ActionListener {
public void actionPerformed(ActionEvent e) {
String event=e.getActionCommand();
Clipboard clipboard =jf.getToolkit().getSystemClipboard();
if(event=="复制") {
String temp=jtf.getText();
StringSelection date=new StringSelection(temp);
clipboard.setContents(date,date);
jl.setText("复制("+temp+")");
} else if(event=="粘贴") {
Transferable clipData=clipboard.getContents(clipboard);
if (clipData != null){
try{
if (clipData.isDataFlavorSupported(DataFlavor.stringFlavor)){
jtf.setText("");
String s = (String)(clipData.getTransferData(DataFlavor.stringFlavor));
jtf.replaceSelection(s);
jl.setText("粘贴("+s+")");
}
}catch (UnsupportedFlavorException ufe) {
System.err.println("Unsupported flavor: " + ufe);
}catch (IOException ufe) {
System.err.println("Unable to get data: " + ufe);
}
}
}
else if(event=="普通") {
jl.setText("普通");
} else if(event=="科学") {
jl.setText("科学");
} else if(event=="关于") {
JFrame j=new JFrame();
j.setTitle("关于");
j.setSize(200,100);
j.setLocation(550,550);
j.setVisible(true);
Container contentPane=j.getContentPane();
JTextField aa=new JTextField();
aa.setEditable(false);
aa.setHorizontalAlignment(JTextField.CENTER);
aa.setText("本程序由李信一完成!");
aa.setBackground(Color.LIGHT_GRAY);
contentPane.add(aa,BorderLayout.CENTER);
j.validate();
}
}
}
public static void main(String[] args) {
Calculator c=new Calculator();
}
public void init() {
Calculator c=new Calculator();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -