📄 calculator.java
字号:
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.lang.*;
public class Calculator extends JFrame implements ActionListener
{
//菜单----开始
JMenuBar mb=new JMenuBar();
JMenu m1=new JMenu("编辑(E)");
JMenu m2=new JMenu("查看(V)");
JMenu m3=new JMenu("帮助(H)");
JMenuItem m1_1=new JMenuItem("复制(C) Ctrl+C");
JMenuItem m1_2=new JMenuItem("粘贴(P) Ctrl+V");
JMenuItem m2_1=new JMenuItem("标准型(T)");
JMenuItem m2_2=new JMenuItem("科学型(S)");
JMenuItem m2_3=new JMenuItem("数字分组(I)");
JMenuItem m3_1=new JMenuItem("帮助主题(H)");
JMenuItem m3_2=new JMenuItem("关于计算器(A)");
JMenu m4=new JMenu("文件");
JMenuItem m4_1=new JMenuItem("退出");
//菜单-----结束
//布局
//JPanel p=new JPanel(new BorderLayout());
JPanel p1=new JPanel();
JTextField tf=new JTextField(30);
JPanel p2=new JPanel(new BorderLayout(3,10));
JPanel p2_1=new JPanel(new GridLayout(5,1,5,8));
JButton b1=new JButton();
JButton b2=new JButton("MC");
JButton b3=new JButton("MR");
JButton b4=new JButton("MS");
JButton b5=new JButton("M+");
JPanel p2_2=new JPanel(new BorderLayout(5,10));
JPanel p2_2_1=new JPanel(new GridLayout(1,3,3,5));
JButton b6=new JButton("Backspace");
JButton b7=new JButton("CE");
JButton b8=new JButton("C");
JPanel p2_2_2=new JPanel(new GridLayout(4,5,3,3));
String a[]={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};
JButton b[]=new JButton[20];
///布局--------结束
///-----------------------------------------方法
public Calculator()
{
super("软件工程2班 叶炳良 3104007022" );
this.setResizable(false);
this.setSize(350,250);
//菜单--------开始//
m1.add(m1_1); m1.add(m1_2);
m2.add(m2_1); m2.add(m2_2); m2.addSeparator(); m2.add(m2_3);
m3.add(m3_1); m3.addSeparator(); m3.add(m3_2);
//----------------------------给"退出"菜单加监听器
m4_1.addActionListener(this);
m4.add(m4_1);
mb.add(m1); mb.add(m2); mb.add(m3); mb.add(m4);
setJMenuBar(mb);
///菜单--------结束//
//p1
//文本域
//---------------------------文本域设置右对齐
tf.setHorizontalAlignment(JTextField.RIGHT);
//--------------------------给文本域加监听器
tf.addActionListener(this);
p1.add(tf);
//p2
//p2_1
//-------------------------背景颜色
b2.setForeground(Color.red);
b3.setForeground(Color.red);
b4.setForeground(Color.red);
b5.setForeground(Color.red);
//---------------------------------------字体
b2.setFont(new Font("Arial",Font.PLAIN,12));
b3.setFont(new Font("Arial",Font.PLAIN,12));
b4.setFont(new Font("Arial",Font.PLAIN,12));
b5.setFont(new Font("Arial",Font.PLAIN,12));
//--------------------------------------------------设置按钮凹下
b1.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));
//--------------------------------------------------设置按钮凸起
b2.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
b3.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
b4.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
b5.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
p2_1.add(b1); p2_1.add(b2); p2_1.add(b3); p2_1.add(b4); p2_1.add(b5);
//p2_2
//---------------------------------------------------------p2_2_1
b6.setForeground(Color.red);
b7.setForeground(Color.red);
b8.setForeground(Color.red);
b6.setFont(new Font("Arial",Font.PLAIN,12));
b7.setFont(new Font("Arial",Font.PLAIN,12));
b8.setFont(new Font("Arial",Font.PLAIN,12));
b6.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
b7.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
b8.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
//------------给退格键加监听器
b6.addActionListener(this);
b8.addActionListener(this);
p2_2_1.add(b6); p2_2_1.add(b7); p2_2_1.add(b8);
//--------------------------------------------------------p2_2_2
for (int i = 0; i<b.length; i++)
{
//初始化
b[i]=new JButton(a[i]);
//-------------------------------按钮凸起
b[i].setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
p2_2_2.add(b[i]);
//-------------------------------加字体颜色
b[i].setForeground(Color.blue);
//--------------------------------设置字体
b[i].setFont(new Font("Arial",Font.PLAIN,12));
//-------------------------------添加监听器
b[i].addActionListener(this);
}
//------------------给运算符加字体颜色
b[3].setForeground(Color.red);
b[8].setForeground(Color.red);
b[13].setForeground(Color.red);
b[18].setForeground(Color.red);
b[19].setForeground(Color.red);
//往P2_2添加组件
p2_2.add(p2_2_1,BorderLayout.NORTH);
p2_2.add(p2_2_2,BorderLayout.CENTER);
//
p2.add(p2_1,BorderLayout.WEST);
p2.add(p2_2,BorderLayout.CENTER);
Container c=this.getContentPane();
c.add(p1,BorderLayout.NORTH);
c.add(p2,BorderLayout.CENTER);
this.show(true);
}
///事件处理///
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("sqrt")||e.getActionCommand().equals("1/x")||e.getActionCommand().equals("=")||e.getActionCommand().equals("+/-")||e.getActionCommand().equals("Backspace")||e.getActionCommand().equals("CE")||e.getActionCommand().equals("C")||e.getActionCommand().equals("退出"))
{
//------------------------------------------------------退出菜单
if(e.getActionCommand().equals("退出"))
{
int a=JOptionPane.showConfirmDialog(null,"确定退出吗?","询问",JOptionPane.YES_NO_OPTION);
if(a==0)
{
JOptionPane.showMessageDialog(null,"谢谢使用","消息",JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
}
else
if(a==1)
{
int b=JOptionPane.showConfirmDialog(null,"是否继续使用?","询问",JOptionPane.YES_NO_OPTION);
}
}
//---------------------------------------------------退格键
if(e.getActionCommand().equals("Backspace"))
{
tg();
}
//---------------------------------------------------归零
if(e.getActionCommand().equals("C"))
{
String s=tf.getText();
tf.setText("");
}
///-数据计算//
//------------------------------转换正负数
if(e.getActionCommand().equals("+/-"))
{
String ssss=tf.getText().trim();
System.out.println(ssss);
try {
double ssss1 = -(Double.parseDouble(ssss));
//System.out.println(ssss1);
tf.setText(ssss1+"");
}
catch (Exception ex) {
System.out.println (ex.getMessage());
}
}
//------------------------------求平方根
if(e.getActionCommand().equals("sqrt"))
{
String s=tf.getText().trim();
//s+=e.getActionCommand();
double s1=Double.parseDouble(s);
double ss=Math.sqrt(s1);
tf.setText(ss+"");
}
//-------------------------------倒数
if(e.getActionCommand().equals("1/x"))
{
String s=tf.getText().trim();
//s+=e.getActionCommand();
double s1=Double.parseDouble(s);
double ss=1/s1;
tf.setText(ss+"");
}
//------------------------------等于
if(e.getActionCommand().equals("="))
{
String s = tf.getText().trim();
System.out.println (s);
js(s);
}
}
else
{
String s=tf.getText();
if(s.length()<18)
{
s+=e.getActionCommand();
tf.setText(s);
}
}
}
public void js(String str)
{
int a,b,c,d,e;
a = str.indexOf('+');
b = str.indexOf('-');
c = str.indexOf('*');
d = str.indexOf('/');
e = str.indexOf("%");
//-------------------------------------------加法
if(a!=-1)
{
double s1=Double.parseDouble(str.substring(0,a));
double s2=Double.parseDouble(str.substring(a+1));
double su=s1+s2;
tf.setText(su+"");
}
//-------------------------------------------减法
if(b!=-1)
{
double s1=Double.parseDouble(str.substring(0,b));
double s2=Double.parseDouble(str.substring(b+1));
double su=s1-s2;
tf.setText(su+"");
}
//-------------------------------------------乘法
if(c!=-1)
{
double s1=Double.parseDouble(str.substring(0,c));
double s2=Double.parseDouble(str.substring(c+1));
double su=s1*s2;
tf.setText(su+"");
}
//-------------------------------------------除法
if(d!=-1)
{
double s1=Double.parseDouble(str.substring(0,d));
double s2=Double.parseDouble(str.substring(d+1));
double su=s1/s2;
tf.setText(su+"");
}
//-------------------------------------------取余
if(e!=-1)
{
int s1=Integer.parseInt(str.substring(0,e));
int s2=Integer.parseInt(str.substring(e+1));
int su=s1%s2;
tf.setText(su+"");
}
}
public void tg()
{
String tg = tf.getText().trim(); //trim,去除字符串两端空格
if(tg.length()>0)
{
String tg1 = tg.substring(0,tg.length()-1);
tf.setText(tg1);
}
}
///主方法//
public static void main(String[]args)
{
new Calculator();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -