diff --git a/src/java2022spring/Panel.java b/src/java2022spring/Panel.java new file mode 100644 index 0000000000000000000000000000000000000000..2cf61b2f75d40a80e968a8de38874a94be2ab2e3 --- /dev/null +++ b/src/java2022spring/Panel.java @@ -0,0 +1,177 @@ +package java2022spring; + +import java.awt.event.*; +import java.math.BigDecimal; +import java.util.InputMismatchException; +import java.util.StringTokenizer; +import javax.swing.*; +import java.awt.*; + +public class Panel extends JFrame{ + JFrame frame=new JFrame("计算器"); + JPanel p1=new JPanel(); + JPanel p2=new JPanel(); + JButton button[][]=new JButton[5][4]; + JTextField textone=new JTextField(40); + boolean isNum; + Panel() { + p1.add(textone); + p2.setLayout(new java.awt.GridLayout(5,4,4,4)); + frame.setResizable(false); + frame.setSize(400,350); + frame.setLocationRelativeTo(null); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.add(p1,BorderLayout.NORTH); + frame.add(p2,BorderLayout.CENTER); + frame.setVisible(true); + String [][] s={ {"AC","sqrt","^2","/"}, + {"7","8","9","*"}, + {"4","5","6","-"}, + {"1","2","3","+"}, + {".","0","=","%"}}; + for(int i=0;i<5;i++){ + for(int j=0;j<4;j++){ + button[i][j]=new JButton(s[i][j]); + button[i][j].setFont(new Font ("宋体",Font.BOLD,25)); + p2.add(button[i][j]); + } + } + listener jt=new listener(); + button[4][1].addActionListener(jt); + for(int i=1;i<4;i++){ + for(int j=0;j<3;j++){ + button[i][j].addActionListener(jt); + } + } + + listener_AC jt_AC=new listener_AC(); + button[0][0].addActionListener(jt_AC); + MyEvent(); + + } + class listener implements ActionListener{ + + + @Override + public void actionPerformed(ActionEvent e) { + // TODO 自动生成的方法存根 + String t=e.getActionCommand(); + String s=textone.getText(); + if(isNum==false) + textone.setText(t); + else + textone.setText(s+t); + isNum=true; + } + } + + class listener_AC implements ActionListener{ + + @Override + public void actionPerformed(ActionEvent e) { + // TODO 自动生成的方法存根 + textone.setText(""); + } + } + public void MyEvent(){ + + Text(button[0][1]); + Text(button[0][2]); + Text(button[4][2]); + Text(button[0][3]); + Text(button[1][3]); + Text(button[2][3]); + Text(button[3][3]); + Text(button[4][3]); + Text(button[4][0]); + + button[4][2].addActionListener (new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + // TODO 自动生成的方法存根 + textone.setText(textone.getText()+button[4][2].getText()); + double x,y=0; + if(textone.getText().contains("+")) { + StringTokenizer str1=new StringTokenizer(textone.getText(),"+");//str1为textone的输入,以+来分割字符串 + x=Double.parseDouble(str1.nextToken()); //x为输入的第一个数 + while(str1.hasMoreTokens()) { //如果第一个数后面还有输入 + StringTokenizer str2=new StringTokenizer(str1.nextToken(),"=");//str2为textone除符号外的第二个输入 + y=Double.parseDouble(str2.nextToken()); //y为输入的第二个数 + } + textone.setText(textone.getText()+" "+(x+y)); //加法时的运算结果 + } + else if(textone.getText().contains("-")) { + StringTokenizer str1=new StringTokenizer(textone.getText(),"-"); + x=Double.parseDouble(str1.nextToken()); + while(str1.hasMoreTokens()) { + StringTokenizer str2=new StringTokenizer(str1.nextToken(),"="); + y=Double.parseDouble(str2.nextToken()); + } + textone.setText(textone.getText()+" "+(x-y)); + } + else if(textone.getText().contains("*")) { + StringTokenizer str1=new StringTokenizer(textone.getText(),"*"); + x=Double.parseDouble(str1.nextToken()); + while(str1.hasMoreTokens()) { + StringTokenizer str2=new StringTokenizer(str1.nextToken(),"="); + y=Double.parseDouble(str2.nextToken()); + } + textone.setText(textone.getText()+" "+(x*y)); + } + else if(textone.getText().contains("/")) { + StringTokenizer str1=new StringTokenizer(textone.getText(),"/"); + x=Double.parseDouble(str1.nextToken()); + while(str1.hasMoreTokens()) { + StringTokenizer str2=new StringTokenizer(str1.nextToken(),"="); + y=Double.parseDouble(str2.nextToken()); + } + if(y==0.0) + textone.setText("表达式错误"); + else + textone.setText(textone.getText()+" "+(x/y)); + } + else if(textone.getText().contains("sqrt")) { + StringTokenizer str1=new StringTokenizer(textone.getText(),"sqrt"); + x=Double.parseDouble(str1.nextToken()); + textone.setText(textone.getText()+" "+(Math.sqrt(x))); + } + else if(textone.getText().contains("%")) { + StringTokenizer str1=new StringTokenizer(textone.getText(),"%"); + x=Double.parseDouble(str1.nextToken()); + while(str1.hasMoreTokens()) { + StringTokenizer str2=new StringTokenizer(str1.nextToken(),"="); + y=Double.parseDouble(str2.nextToken()); + } + if(y==0.0) + textone.setText("表达式错误"); + else + textone.setText(textone.getText()+" "+(x%y)); + + } + else if(textone.getText().contains("^2")) { + StringTokenizer str1=new StringTokenizer(textone.getText(),"^2"); + x=Double.parseDouble(str1.nextToken()); + textone.setText(textone.getText()+" "+(x*x)); + } + } + }); + } + + public void Text(JButton button){ + button.addActionListener(new ActionListener(){ + + @Override + public void actionPerformed(ActionEvent arg) { + // TODO Auto-generated method stub + + String str = button.getText(); + + textone.setText(textone.getText()+str); + } + }); + } + + public static void main(String[] args) { + new Panel(); + } + } \ No newline at end of file