计算器制作JAVA版(第三步,表达式求值(+

 我来答
匿名用户
2017-12-31
展开全部

1.首先思考一下制作计算器需要哪些Swing组件,下面列出一些制作计算器的一些常用组件:

JFrame    Jpanel    JButton     JTextField

2.选用布局管理器:

这里采用的是GridBagLayout,即网格包布局管理器。

3.如何处理按钮事件:

这里可以分两种情况来考虑,一:处理0~9的数字按钮和"."按钮,这种按钮的单击事件很简单,只需要获取监听的对象,并在文本框中显示对象的数据即可。

二:处理操作按钮即文本为+,-,*,/,C(清除),D(删除)和=的按钮,这些按钮的事件处理稍微复杂。

4.具体实现代码如下:

1.创建Calculator类,该类继承自JFrame类

[java] view plain copy

  • import java.awt.BorderLayout;  

  • import java.awt.GridBagConstraints;  

  • import java.awt.GridBagLayout;  

  • import java.awt.event.ActionEvent;  

  • import java.awt.event.ActionListener;  

  • import javax.swing.JButton;  

  • import javax.swing.JFrame;  

  • import javax.swing.JOptionPane;  

  • import javax.swing.JPanel;  

  • import javax.swing.JTextField;  

  • public class Calculator extends JFrame {  

  • private static final long serialVersionUID = 1L;  

  • private JTextField jtf=new JTextField();  

  • private JPanel panel=new JPanel();  

  • private GridBagLayout gridbaglayout=new GridBagLayout();  

  • private GridBagConstraints constraints=new GridBagConstraints();  

  • private int select=0;  

  • //    private String command="";  

  • private double temp=0.0;  

  • private double number;  

  • public Calculator(){                                                           //创建Calculator类的构造方法  

  • this.setTitle("计算器");  

  • this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

  • this.add(jtf,BorderLayout.NORTH);  

  • this.add(panel, BorderLayout.CENTER);  

  • panel.setLayout(gridbaglayout);                                           //将panel面板设置成网格包布局管理器     

  • this.add(panel);  

  • jtf.setHorizontalAlignment(JTextField.RIGHT);                             //文本靠右            

  • ActionListener nums=new CalculatorAction1();  

  • ActionListener opin=new CalculatorAction2();  

  • constraints.fill=GridBagConstraints.BOTH;  

  • //      constraints.weightx=0.1;  

  • //      constraints.weighty=0.1;  

  • constraints.gridheight=GridBagConstraints.REMAINDER;  

  • addButton("",nums);  

  • constraints.gridheight=1;  

  • addButton("C",opin);  

  • addButton("7",nums);  

  • addButton("4",nums);  

  • addButton("1",nums);  

  • constraints.gridheight=GridBagConstraints.REMAINDER;  

  • addButton("%",nums);  

  • constraints.gridheight=1;  

  • addButton("D",opin);  

  • addButton("8",nums);  

  • addButton("5",nums);  

  • addButton("2",nums);  

  • constraints.gridheight=GridBagConstraints.REMAINDER;  

  • addButton("0",nums);  

  • constraints.gridheight=1;  

  • addButton("/",opin);  

  • addButton("9",nums);  

  • addButton("6",nums);  

  • addButton("3",nums);  

  • constraints.gridheight=GridBagConstraints.REMAINDER;  

  • addButton(".",nums);  

  • constraints.gridheight=1;  

  • addButton("*",opin);  

  • addButton("-",opin);  

  • addButton("+",opin);  

  • constraints.gridheight=GridBagConstraints.REMAINDER;  

  • addButton("=",opin);  

  • }  

  • private void addButton(String str,ActionListener list){                     //添加按钮方法  

  • JButton button=new JButton(str);  

  • if(str.equals("")||str.equals("%")){  

  • button.setEnabled(false);  

  • }  

  • button.addActionListener(list);      //向按钮添加事件  

  • gridbaglayout.setConstraints(button, constraints);  

  • panel.add(button);                   //将按钮添加到JPanel容器中   

  • }  

  • class CalculatorAction1 implements ActionListener{                       //创建内部类并实现ActionListener接口,实现数字按钮的监听事件  

  • public void actionPerformed(ActionEvent e){  

  • String input = e.getActionCommand();  

  • //          System.out.println(input);  

  • jtf.setText(jtf.getText()+input);   //在文本中显示用户单击的按钮文本内容  

  • }  

  • }  

  • class CalculatorAction2 implements ActionListener{                      //创建内部类并实现ActionListener接口,实现操作按钮的监听事件  

  • public void actionPerformed(ActionEvent e){  

  • String command=e.getActionCommand();  

  • if(command.equals("+")){  

  • temp=Double.parseDouble(jtf.getText());  

  • jtf.setText("");  

  • select=1;  

  • }  

  • if(command.equals("-")){  

  • temp=Double.parseDouble(jtf.getText());  

  • jtf.setText("");  

  • select=2;  

  • }  

  • if(command.equals("*")){  

  • temp=Double.parseDouble(jtf.getText());  

  • jtf.setText("");  

  • select=3;  

  • }  

  • if(command.equals("/")){  

  • temp=Double.parseDouble(jtf.getText());  

  • jtf.setText("");  

  • select=4;  

  • }  

  • if(command.equals("C")){  

  • jtf.setText("");  

  • }  

  • if(command.equals("D")){  

  • jtf.setText(jtf.getText().substring(0, jtf.getText().length()-1));  

  • }  

  • if(command.equals("=")){  

  • if(select==1){  

  • number=Double.parseDouble(jtf.getText());  

  • jtf.setText((temp+number)+"");  

  • }  

  • else if(select==2){  

  • number=Double.parseDouble(jtf.getText());  

  • jtf.setText((temp-number)+"");  

  • }  

  • else if(select==3){  

  • number=Double.parseDouble(jtf.getText());  

  • jtf.setText((temp*number)+"");  

  • }  

  • else if(select==4){  

  • number=Double.parseDouble(jtf.getText());  

  • if(number==0){  

  • JOptionPane.showMessageDialog(panel, "除数不能为0");  

  • }  

  • else  

  • jtf.setText((temp/number)+"");  

  • }  

  • }  

  • }  

  • }  

  • }  

  • 2.创建CalculatorTest类

    [java] view plain copy

  • public class CalculatorTest {  

  • public static void main(String[] args) {  

  • Calculator mainFrame=new Calculator();  

  • mainFrame.setBounds(300, 200, 200, 200);  

  • mainFrame.setVisible(true);  

  • mainFrame.setResizable(false);  

  • }  

  • }  

  • 阅读全文

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式