import javax.swing.*; import javax.swing.JTextField; import java.awt.*; import java.awt.event.*; import java.lang.*; import java.awt.Color; public class A extends JFrame implements ActionListener { //JFrame(框架)为主程序窗口 private JPanel p1 = new JPanel(); //创建面板 private JPanel p2 = new JPanel(); private JTextField t1; //文本框1用来显示输入信息 private JTextField t2; //文本框2用来显示结果信息 private JLabel label; //标签信息 StringBuffer str; //显示屏所显示的字符串 double x,y; //x和y都是运算数 int z; //Z表示单击了那一个运算符.0表示"+",1表示"-",2表示"*",3表示"/" private JButton b[] = new JButton[12]; //创建一个有12个按钮的数组 private JButton b1,b2,b3,b4,b5,b6,b7,b8; //算术功能按钮 public A() { super("A-Wa-JISUNQI"); //窗口名称 Container c = getContentPane(); //创建内容面板对象 t1 = new JTextField(30); t1.setEditable(false); //只能显示,不能编辑 t2 = new JTextField(30); t2.setEditable(false); //只能显示,不能编辑 label = new JLabel("欢迎使用A-Wa计算器"); label.setForeground(Color.blue); //创建一个空字符串缓冲区 str=new StringBuffer(); p2.add(label); //添加标签到面板 p2.add(t2); //添加文本框到面板 p2.add(t1); //添加文本框到面板 p2.setLayout(new GridLayout(4,1)); //把面扳布局为4行1列 for(int i=0;i<10;i++) //分别为数组中0~9号的按钮设置标签,并注册监听器 { String s=""+i; b[i]= new JButton(s); b[i].addActionListener(this); } //实例化各个按钮 b[10]= new JButton("-/+"); b[11]= new JButton("."); b1= new JButton("/"); b2= new JButton("Back"); b3= new JButton("*"); b4= new JButton("C"); b5= new JButton("+"); b6= new JButton("Sqrt"); b7= new JButton("-"); b8= new JButton("="); //设置按钮前景色 for(int i=0;i<12;i++) { b[i].setForeground(Color.red); } b1.setForeground(Color.red); b3.setForeground(Color.red); b5.setForeground(Color.red); b7.setForeground(Color.red); b2.setForeground(Color.blue); b4.setForeground(Color.blue); b6.setForeground(Color.red); b8.setForeground(Color.blue); //添加到面板 p1.add(b[7]); p1.add(b[8]); p1.add(b[9]); p1.add(b1); p1.add(b2); p1.add(b[4]); p1.add(b[5]); p1.add(b[6]); p1.add(b3); p1.add(b4); p1.add(b[1]); p1.add(b[2]); p1.add(b[3]); p1.add(b5); p1.add(b6); p1.add(b[0]); p1.add(b[10]); p1.add(b[11]);p1.add(b7);p1.add(b8); p1.setLayout(new GridLayout(4,5,5,5)); //注册监听器 b[10].addActionListener(this); b[11].addActionListener(this); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); b5.addActionListener(this); b6.addActionListener(this); b7.addActionListener(this); b8.addActionListener(this); //将面板添加到内容面板 c.add(p2); c.add(p1); c.setLayout(new FlowLayout()); //设置为顺序布局 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗口关闭动作 setVisible(true); //设置为可见 setResizable(false); //禁止调整框架大小 setSize(400,300); //设置窗口大小 } //主方法实现创建一个窗口 public static void main(String[] args) { A f = new A(); } //按钮的事件处理 public void actionPerformed(ActionEvent e) { try { if(e.getSource()==b4) { //选择"C"清零 t1.setText("0"); //把文本框清零 t1.setHorizontalAlignment(JTextField.LEFT); //文本对齐右边 str.setLength(0); //清空字符串缓冲区以准备接收新的输入运算数 } else if(e.getSource()==b[10])//单击"+/-"选择输入的运算数是正数还是负数 { x=Double.parseDouble(t1.getText().trim());//trim函数作用是去掉字符串中的空格 t1.setText(""+(-x)); t1.setHorizontalAlignment(JTextField.RIGHT); } else if (e.getSource()==b5)//单击加号按钮获得x的值和z的值并清空y的值 { x=Double.parseDouble(t1.getText().trim()); str.setLength(0); y=0d; z=0; } else if(e.getSource()==b7)//单击减号按钮获得x的值和z的值并清空y的值 { x=Double.parseDouble(t1.getText().trim()); str.setLength(0); y=0d; z=1; } else if(e.getSource()==b3)//单击乘号按钮获得x的值和z的值并清空y的值 { x=Double.parseDouble(t1.getText().trim()); str.setLength(0); y=0d; z=2; } else if(e.getSource()==b1)//单击除号按钮获得x的值和z的值并清空y的值 { x=Double.parseDouble(t1.getText().trim()); str.setLength(0); y=0d; z=3; } else if(e.getSource()==b8)//单击等号按钮输出计算结果 { str.setLength(0); switch(z) { case 0: t1.setText(""+(x+y)); t1.setHorizontalAlignment(JTextField.RIGHT);break; case 1: t1.setText(""+(x-y)); t1.setHorizontalAlignment(JTextField.RIGHT);break; case 2: t1.setText(""+(x*y)); t1.setHorizontalAlignment(JTextField.RIGHT);break; case 3: t1.setText(""+(x/y)); t1.setHorizontalAlignment(JTextField.RIGHT);break; } } else if(e.getSource()==b[11])//单击"."按钮输入小数 { if(t1.getText().trim().indexOf('.')!=-1)//判断字符串中是否已经包含了小数点 { } else //如果没有小数点 { if(t1.getText().trim().equals("0"))//如果初时显示为0 { t1.setText(str.append(e.getActionCommand()).toString()); t1.setHorizontalAlignment(JTextField.RIGHT); } else if(t1.getText().trim().equals(""))//如果初时显示为空则不做任何操作 {} else { t1.setText(str.append(e.getActionCommand()).toString()); t1.setHorizontalAlignment(JTextField.RIGHT); } } y=0d; } else if(e.getSource()==b6) //求平方根 { x=Double.parseDouble(t1.getText().trim()); if(x<0) { t1.setText("数字格式异常"); t1.setHorizontalAlignment(JTextField.RIGHT); } else { t1.setText(""+Math.sqrt(x)); t1.setHorizontalAlignment(JTextField.RIGHT); } str.setLength(0); y=0d; } else { if(e.getSource()==b[0])//如果选择的是"0"这个数字键 { if(t1.getText().trim().equals("0"))//如果显示屏显示的为零不做操作 {} else t1.setText(str.append(e.getActionCommand()).toString()); t1.setHorizontalAlignment(JTextField.RIGHT); y=Double.parseDouble(t1.getText().trim()); } else if (e.getSource()==b2) //选择的是back键 { if(!t1.getText().trim().equals("0"))//如果显示屏显示的不是零 { if(str.length()!=1) { t1.setText(str.delete(str.length()-1,str.length()).toString());//可能抛出字符串越界异常 t1.setHorizontalAlignment(JTextField.RIGHT); } else { t1.setText("0"); t1.setHorizontalAlignment(JTextField.RIGHT); str.setLength(0); } } y=Double.parseDouble(t1.getText().trim()); } else { t1.setText(str.append(e.getActionCommand()).toString()); t1.setHorizontalAlignment(JTextField.RIGHT); y=Double.parseDouble(t1.getText().trim()); } } } catch(NumberFormatException e1){ t1.setText("数字格式异常"); t1.setHorizontalAlignment(JTextField.RIGHT); } catch(StringIndexOutOfBoundsException e1){t1.setText("字符串索引越界"); t1.setHorizontalAlignment(JTextField.RIGHT);} } }
1 回答
_坐看云起时
TA贡献9条经验 获得超9个赞
你可以把要输入的计算表达式用一个字符串记录下来,然后进行分割、数据类型转换。
我以前做过一个简单的计算器,代码如下:
import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JTextField; import javax.swing.JButton; import java.awt.Font; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; public class calculatorTest extends JFrame { private JPanel contentPane; private JTextField textField; private JButton button_08; private JButton button_09; private JButton button_04; private JButton button_05; private JButton button_06; private JButton button_01; private JButton button_02; private JButton button_03; private JButton add; private JButton subtract; private JButton multiply; private JButton button_11; private JButton division; private JButton result; private JButton btnC; private StringBuffer buffer1=new StringBuffer(); //用于存储用户输入的计算表达式 /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { calculatorTest frame = new calculatorTest(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public calculatorTest() { setResizable(false); setTitle("\u8BA1\u7B97\u5668"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 314, 325); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); textField = new JTextField(); textField.setEditable(false); textField.setFont(new Font("宋体", Font.BOLD, 25)); textField.setBounds(0, 0, 308, 42); contentPane.add(textField); textField.setColumns(10); JButton button_07 = new JButton("7"); button_07.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(7); //向记录运算表达式的字符串增加相应的字符 textField.setText(buffer1.toString()); //向文本框表达所输入的内容 } }); button_07.setFont(new Font("宋体", Font.BOLD, 12)); button_07.setBounds(10, 52, 60, 40); contentPane.add(button_07); button_08 = new JButton("8"); button_08.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(8); textField.setText(buffer1.toString()); } }); button_08.setFont(new Font("宋体", Font.BOLD, 12)); button_08.setBounds(80, 52, 60, 40); contentPane.add(button_08); button_09 = new JButton("9"); button_09.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(9); textField.setText(buffer1.toString()); } }); button_09.setFont(new Font("宋体", Font.BOLD, 12)); button_09.setBounds(160, 52, 60, 40); contentPane.add(button_09); button_04 = new JButton("4"); button_04.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(4); textField.setText(buffer1.toString()); } }); button_04.setFont(new Font("宋体", Font.BOLD, 12)); button_04.setBounds(10, 117, 60, 40); contentPane.add(button_04); button_05 = new JButton("5"); button_05.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(5); textField.setText(buffer1.toString()); } }); button_05.setFont(new Font("宋体", Font.BOLD, 12)); button_05.setBounds(80, 117, 60, 40); contentPane.add(button_05); button_06 = new JButton("6"); button_06.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(6); textField.setText(buffer1.toString()); } }); button_06.setFont(new Font("宋体", Font.BOLD, 12)); button_06.setBounds(160, 117, 60, 40); contentPane.add(button_06); button_01 = new JButton("1"); button_01.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(1); textField.setText(buffer1.toString()); } }); button_01.setFont(new Font("宋体", Font.BOLD, 12)); button_01.setBounds(10, 179, 60, 40); contentPane.add(button_01); button_02 = new JButton("2"); button_02.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(2); textField.setText(buffer1.toString()); } }); button_02.setFont(new Font("宋体", Font.BOLD, 12)); button_02.setBounds(80, 179, 60, 40); contentPane.add(button_02); button_03 = new JButton("3"); button_03.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(3); textField.setText(buffer1.toString()); } }); button_03.setFont(new Font("宋体", Font.BOLD, 12)); button_03.setBounds(160, 179, 60, 40); contentPane.add(button_03); add = new JButton("+"); add.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=new String(buffer1.toString()); //将运算表达式转换成String类型 //对所输入的运算字符进行判断 if(buffer1.length()!=0&&s.indexOf('+')<0&&s.indexOf('-')<0&&s.indexOf('*')<0&&s.indexOf('/')<0&&s.indexOf('=')<0){ buffer1.append("+"); textField.setText(buffer1.toString()); } else{} } }); add.setFont(new Font("宋体", Font.BOLD, 12)); add.setBounds(238, 52, 60, 40); contentPane.add(add); subtract = new JButton("-"); subtract.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=new String(buffer1.toString()); if(buffer1.length()!=0&&s.indexOf('+')<0&&s.indexOf('-')<0&&s.indexOf('*')<0&&s.indexOf('/')<0&&s.indexOf('=')<0){ buffer1.append("-"); textField.setText(buffer1.toString()); } else{} } }); subtract.setFont(new Font("宋体", Font.BOLD, 12)); subtract.setBounds(238, 117, 60, 40); contentPane.add(subtract); multiply = new JButton("*"); multiply.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=new String(buffer1.toString()); if(buffer1.length()!=0&&s.indexOf('+')<0&&s.indexOf('-')<0&&s.indexOf('*')<0&&s.indexOf('/')<0&&s.indexOf('=')<0){ buffer1.append("*"); textField.setText(buffer1.toString()); } else{} } }); multiply.setFont(new Font("宋体", Font.BOLD, 12)); multiply.setBounds(238, 179, 60, 40); contentPane.add(multiply); button_11 = new JButton("0"); button_11.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { buffer1.append(0); textField.setText(buffer1.toString()); } }); button_11.setFont(new Font("宋体", Font.BOLD, 12)); button_11.setBounds(10, 239, 60, 40); contentPane.add(button_11); division = new JButton("/"); division.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=new String(buffer1.toString()); if(buffer1.length()!=0&&s.indexOf('+')<0&&s.indexOf('-')<0&&s.indexOf('*')<0&&s.indexOf('/')<0&&s.indexOf('=')<0){ buffer1.append("/"); textField.setText(buffer1.toString()); } else{} } }); division.setFont(new Font("宋体", Font.BOLD, 12)); division.setBounds(238, 239, 60, 40); contentPane.add(division); result = new JButton("="); result.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=new String(buffer1.toString()); //对所输入的运算字符进行判断 if(buffer1.length()!=0&&(s.indexOf('+')==0||s.indexOf('-')==0||s.indexOf('*')==0||s.indexOf('/')==0||s.indexOf('=')<0)){ buffer1.append("="); textField.setText(buffer1.toString()); String str=new String(buffer1.toString()); String str1[]=new String[2]; String str2[]=new String[2]; //对运算符进行判断,进行相应的运算 if(str.indexOf('+')>0){ //对运算符前面字符串和运算符后面的字符串进行分割 str1=str.split("\\+"); //保存运算符前面的内容并转换数据类型 double number1=Double.parseDouble(str1[0]); str2=str1[1].split("\\="); //对分割后的字符串将等于号运算符前面字符串和等于号运算符后面的字符串进行分割并进行数据类型转换 double number2=Double.parseDouble(str2[0]); double number=number1+number2; textField.setText(str+number); //删除运算表达式的内容,以便下次运算 buffer1.delete(0, (buffer1.length())); } if(str.indexOf('-')>0){ str1=str.split("\\-"); double number1=Double.parseDouble(str1[0]); str2=str1[1].split("\\="); double number2=Double.parseDouble(str2[0]); double number=number1-number2; textField.setText(str+number); buffer1.delete(0, (buffer1.length())); } if(str.indexOf('*')>0){ str1=str.split("\\*"); double number1=Double.parseDouble(str1[0]); str2=str1[1].split("\\="); double number2=Double.parseDouble(str2[0]); double number=number1*number2; textField.setText(str+number); buffer1.delete(0, (buffer1.length())); } if(str.indexOf('/')>0){ str1=str.split("\\/"); double number1=Double.parseDouble(str1[0]); str2=str1[1].split("\\="); double number2=Double.parseDouble(str2[0]); double number=number1/number2; textField.setText(str+number); buffer1.delete(0, (buffer1.length())); } } else{} } }); result.setFont(new Font("宋体", Font.BOLD, 12)); result.setBounds(80, 239, 60, 40); contentPane.add(result); btnC = new JButton("C"); btnC.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(buffer1.length()>0){ buffer1.deleteCharAt(buffer1.length()-1); textField.setText(buffer1.toString()); } else{ } } }); btnC.setFont(new Font("宋体", Font.BOLD, 12)); btnC.setBounds(160, 239, 60, 40); contentPane.add(btnC); } }
添加回答
举报
0/150
提交
取消