DIY简易计算器
借鉴博主https://blog.csdn.net/without_scruple/article/details/78603605
这位博主的代码是我看到的最容易理解并简洁的代码,同时我添加了清除、命名、图标功能,实现简单的加减乘除
对java界面有了更近一步理解
代码如下:
package design;import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.StreamTokenizer;
import java.util.StringTokenizer;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;public class Demo1_topic01 extends JFrame {private static final long serialVersionUID = 1L;private JTextField text;public JButton jb0,jb1,jb2,jb3,jb4,jb5,jb6,jb7,jb8,jb9; //0~9四个数字(可写成数组)public JButton bot,add,sub,mul,div,equ,clear; //加减乘除以及小数点五个符号private JPanel panel;public Demo1_topic01() {init();Panel();MyEvent(); //事件处理}private void MyEvent() {//为各按钮添加事件处理Text(jb0);Text(jb1);Text(jb2);Text(jb3);Text(jb4);Text(jb5);Text(jb6);Text(jb7);Text(jb8);Text(jb9);Text(bot);Text(add);Text(sub);Text(mul);Text(div);//“=”按钮的事件处理equ.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {text.setText(text.getText() + equ.getText());if(text.getText().contains("+")) {//做加法运算StringTokenizer str1 = new StringTokenizer(text.getText(), "+");double d1, d2 = 0;d1 = Double.parseDouble(str1.nextToken());while (str1.hasMoreTokens()) {StringTokenizer str2 = new StringTokenizer(str1.nextToken(),"=");d2 = Double.parseDouble(str2.nextToken());}text.setText(text.getText() + " " + (d1+d2));//将运算结果放到text区域}else if (text.getText().contains("-")) {StringTokenizer str1 = new StringTokenizer(text.getText(),"-");double d1,d2 = 0;d1 = Double.parseDouble(str1.nextToken());while(str1.hasMoreTokens()){StringTokenizer str2 = new StringTokenizer(str1.nextToken(),"=");d2 = Double.parseDouble(str2.nextToken());}text.setText(text.getText() + " " + (d1-d2));}else if(text.getText().contains("*")) {StringTokenizer str1 = new StringTokenizer(text.getText(),"*");double d1,d2 = 0;d1 = Double.parseDouble(str1.nextToken());while(str1.hasMoreTokens()){StringTokenizer str2 = new StringTokenizer(str1.nextToken(),"=");d2 = Double.parseDouble(str2.nextToken());}text.setText(text.getText() + " " + (d1*d2));}else if (text.getText().contains("/")){StringTokenizer str1 = new StringTokenizer(text.getText(),"/");double d1,d2 = 0;d1 = Double.parseDouble(str1.nextToken());while(str1.hasMoreTokens()){StringTokenizer str2 = new StringTokenizer(str1.nextToken(),"=");d2 = Double.parseDouble(str2.nextToken());}text.setText(text.getText() + " " + (d1/d2));}}});clear.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {text.setText("");}});}private void Text(final JButton button) {//各按钮的事件处理方法button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent arg0) {String str = button.getText();text.setText(text.getText() + str);}});}private void Panel() {panel = new JPanel(); //新建计算器数字及符号所在区域面板panel.setLayout(new GridLayout(4,4)); //设置面板的布局方式//将各按钮组件放入面板(panel)中//第一行panel.add(jb7);panel.add(jb8);panel.add(jb9);panel.add(div);//第二行panel.add(jb4);panel.add(jb5);panel.add(jb6);panel.add(mul);//第三行panel.add(jb1);panel.add(jb2);panel.add(jb3);panel.add(sub);//第四行panel.add(bot);panel.add(jb0);panel.add(equ);panel.add(add);//panel.add(clear);this.add(panel,BorderLayout.CENTER);Panel sourth = new Panel();sourth.add(clear);this.add(sourth,BorderLayout.SOUTH);//将Panel放在Frame的南边}private void init() {this.setBounds(800, 300, 400, 400); //窗体大小this.setTitle("最白の白菜—简单计算器"); //窗体名称this.setLayout(new BorderLayout());text = new JTextField(30); //计算区域this.add(text,BorderLayout.NORTH);//新建数字按钮jb0 = new JButton("0");jb1 = new JButton("1");jb2 = new JButton("2");jb3 = new JButton("3");jb4 = new JButton("4");jb5 = new JButton("5");jb6 = new JButton("6");jb7 = new JButton("7");jb8 = new JButton("8");jb9 = new JButton("9");//新建符号按钮bot = new JButton(".");add = new JButton("+");sub = new JButton("-");mul = new JButton("*");div = new JButton("/");equ = new JButton("=");clear = new JButton("C");this.setIconImage(Toolkit.getDefaultToolkit().createImage("计算器.png"));this.setVisible(true); //设置窗体显示}public static void main(String[] args) {new Demo1_topic01();}}
运行界面