JAVA项目一:图形化界面计算器

最终效果图:

JAVA项目一:图形化界面计算器_第1张图片

项目流程:

第一步:实现图形化界面(添加计算器的 Button 和 用于显示输入数字、输出结果的JTextField等)

JAVA项目一:图形化界面计算器_第2张图片

第二步:给按钮和文本框添加鼠标监听事件。
第三步:实现加减乘除、开方、平方、清零和退格功能。
开方运算:
JAVA项目一:图形化界面计算器_第3张图片

平方运算:
JAVA项目一:图形化界面计算器_第4张图片

加法运算:
JAVA项目一:图形化界面计算器_第5张图片

JAVA项目一:图形化界面计算器_第6张图片

减法运算:
JAVA项目一:图形化界面计算器_第7张图片

JAVA项目一:图形化界面计算器_第8张图片

乘法运算:
JAVA项目一:图形化界面计算器_第9张图片

JAVA项目一:图形化界面计算器_第10张图片

除法运算:
JAVA项目一:图形化界面计算器_第11张图片

JAVA项目一:图形化界面计算器_第12张图片

完整项目代码:

package First_App;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Caculator extends JFrame{
    /*
     * 图形化界面设计
     * */
    private static final long serialVersionUID = 4907149509182425824L;
    public Caculator(){
        Container c = getContentPane(); //定义一个顶级容器c
        setLayout(new GridLayout(2,1));//新建网格布局管理器,2行1列
        JTextField jtf = new JTextField("0",40);//构造一个用指定文本和列初始化的新文本框--jtf
            jtf.setHorizontalAlignment(JTextField.RIGHT);//设置水平对齐方式:居右对齐
        JButton data0 = new JButton("0");
        JButton data1 = new JButton("1");
        JButton data2 = new JButton("2");
        JButton data3 = new JButton("3");
        JButton data4 = new JButton("4");
        JButton data5 = new JButton("5");
        JButton data6 = new JButton("6");
        JButton data7 = new JButton("7");
        JButton data8 = new JButton("8");
        JButton data9 = new JButton("9");
        JButton point = new JButton(".");
        JButton equ = new JButton("=");
        JButton plus = new JButton("+");
        JButton minus = new JButton("-");
        JButton mtp = new JButton("*");
        JButton dvd = new JButton("/");
        JButton sqr = new JButton("sqrt");
        JButton root = new JButton("x^2");
        JButton tg = new JButton("退格");
        JButton ql = new JButton("清零");
        JPanel jp = new JPanel();   //新建JPanel面板--jp
        jp.setLayout(new GridLayout(4,5,5,5));//新建网格布局管理器(行数,列数,组件间的水平垂直间距)
        jp.add(data7);
        jp.add(data8);
        jp.add(data9);
        jp.add(plus);
        jp.add(sqr);
        jp.add(data4);
        jp.add(data5);
        jp.add(data6);
        jp.add(minus);
        jp.add(root);
        jp.add(data1);
        jp.add(data2);
        jp.add(data3);
        jp.add(mtp);
        jp.add(ql);
        jp.add(data0);
        jp.add(point);
        jp.add(equ);
        jp.add(dvd);
        jp.add(tg);
        c.add(jtf);//将文本框jtf添加到顶级容器c中
        c.add(jp);//将JPanel面板jp添加到顶级容器c中
        setSize(400,300);
        setTitle("计算器");
        setVisible(true);
        setResizable(false);//窗体大小由程序员决定,用户不能自由改变大小
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        /*
         * *********************************************************
         *                  
                    相关计算功能的实现                             
         * *********************************************************
         * */

        data0.addActionListener(new ActionListener(){//数字0的输入
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){//将按钮值与0作比较
                    jtf.requestFocus();//把输入焦点放在调用这个方法的控件上(即把光标放在文本框jtf里)
                }
                else{
                    String str = jtf.getText();//取得当前按钮的按钮值
                    jtf.setText(str+"0");   //将文本内容后加上字符0
                }
            }
        });
        data1.addActionListener(new ActionListener(){//数字1的输入
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){//将按钮值与0作比较
                    jtf.setText("");//将文本框初始化为空
                    jtf.setText("1");//将文本框内容置为 1
                    jtf.requestFocus();//把输入焦点放在调用这个方法的控件上(即把光标放在文本框jtf里)
                }
                else{
                    String str = jtf.getText();//取得当前按钮的按钮值
                    jtf.setText(str+"1");   //将文本内容后加上字符1
                }
            }
        });
        data2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("2");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"2");
                }
            }
        });
        data3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("3");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"3");
                }
            }
        });
        data4.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("4");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"4");
                }
            }
        });
        data5.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("5");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"5");
                }
            }
        });
        data6.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("6");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"6");
                }
            }
        });
        data7.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("7");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"7");
                }
            }
        });
        data8.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("8");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"8");
                }
            }
        });
        data9.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("9");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"9");
                }
            }
        });
        point.addActionListener(new ActionListener(){    //点号的输入
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText(".");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+".");
                }
            }
        });
        plus.addActionListener(new ActionListener(){    //+号的输入
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("+");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"+");
                }
            }
        });
        minus.addActionListener(new ActionListener(){    //-号的输入
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("-");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"-");
                }
            }
        });
        mtp.addActionListener(new ActionListener(){    //*号的输入
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("*");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"*");
                }
            }
        });
        dvd.addActionListener(new ActionListener(){    //除号的输入
            public void actionPerformed(ActionEvent arg0){
                if(jtf.getText().equals("0")){
                    jtf.setText("");
                    jtf.setText("/");
                    jtf.requestFocus();
                }
                else{
                    String str = jtf.getText();
                    jtf.setText(str+"/");
                }
            }
        });
        //【**退格功能如下**】
        tg.addActionListener(new ActionListener(){//监听退格键
            public void actionPerformed(ActionEvent arg0){//处理退格键被按下的事件
                String text = jtf.getText();
                int i = text.length();
                if(i>0){
                    text = text.substring(0,i-1);//去掉最后一个字符
                    if (text.length() == 0) {// 如果文本没有了内容,则初始化计算器的各种值
                        jtf.setText("0");
                    } else { // 显示新的文本
                        jtf.setText(text);
                }
            }
            }
        });
        //【**清零功能如下**】
        ql.addActionListener(new ActionListener(){//监听清零键
            public void actionPerformed(ActionEvent e) {
                jtf.setText("0");//将文本框置为0(清零功能)
            }

        });
        //【**平方功能如下**】
        root.addActionListener(new ActionListener(){//监听root键
            public void actionPerformed(ActionEvent e){//root键被按事件
                String i = jtf.getText();
                Double j = Double.parseDouble(i);//将字符串i转换成对应的double类型的数值
                double ans = j*j;  //求平方
                String answer =String.valueOf(ans);//将int型数据转换成String类型
                jtf.setText(answer);//将文本框设置为平方后的结果
            }
        });
        //【**开方功能如下**】
        sqr.addActionListener(new ActionListener(){//监听sqrt键
            public void actionPerformed(ActionEvent e){//sqrt键被按事件
                String i = jtf.getText();
                Double j = Double.parseDouble(i);//将字符串转换成对应的double类型的数值
                double ans = (double)Math.sqrt(j);//求开方
                String answer = String.valueOf(ans);//将double型数据转换成String类型
                jtf.setText(answer);//将文本框设置为开方后的结果
            }
        });

        //【等号实现 加减乘除 功能】
        equ.addActionListener(new ActionListener(){ //监听 “等号” 按键
            public void actionPerformed(ActionEvent arg0){//处理“等号” 按键被按下事件
                //【**加法运算**】
                if(jtf.getText().indexOf("+")!= -1){
                    //将字符串分割为子字符串,然后将结果作为字符串数组返回
                    String[] s = jtf.getText().split("[+]");//转义字符,要用"[+]"或者"\+"
                    Double d1 = Double.parseDouble(s[0]);//返回一个指定字符串表示的double值
                    Double d2 = Double.parseDouble(s[1]);
                    double ans = d1 + d2;
                    String answer = String.valueOf(ans);//将结果转换为字符串
                    jtf.setText(answer);//将加法运算的结果以字符串形式在文本框中显示
                }
                //【**减法运算**】
                else if(jtf.getText().indexOf("-")!= -1){
                    String[] s = jtf.getText().split("-");
                    jtf.setText("");
                    Double d1 = Double.parseDouble(s[0]);
                    Double d2 = Double.parseDouble(s[1]);
                    double ans = d1-d2;
                    String answer =String.valueOf(ans);
                    jtf.setText(answer);
                }
                //【**乘法运算**】
                else if(jtf.getText().indexOf("*")!= -1){
                    String[] s = jtf.getText().split("[*]");//*是转义字符,要用"[*]",或者"\*"
                    jtf.setText("");
                    Double d1 = Double.parseDouble(s[0]);
                    Double d2 = Double.parseDouble(s[1]);
                    double ans = d1*d2;
                    String answer =String.valueOf(ans);
                    jtf.setText(answer);
                }
                //【**除法运算**】
                else if(jtf.getText().indexOf("/")!= -1){
                    String[] s = jtf.getText().split("/");
                    jtf.setText("");
                    Double d1 = Double.parseDouble(s[0]);
                    Double d2 = Double.parseDouble(s[1]);
                    double ans = d1/d2;
                    String answer =String.valueOf(ans);
                    jtf.setText(answer);
                }
                else{
                    jtf.setText("请选择要进行的运算");
                }
            }
        });
    }
    public static void main(String[] args) {
        new Caculator();
    }
}

总结:

1.掌握基本的GUI添加按钮、文本框的方法
2.掌握字符串的处理,这里用到了indexOf()、split()等方法
3.注意Java中遇到的转义字符。

欢迎转载,讨论,共同进步!!!

你可能感兴趣的:(Java项目实战)