文章目录

  • 前言
  • 一、知识点介绍:
  • 二、代码实现:完成此项目,我一共创建了三个java源文件。
  • 1:Myjpanel.java
  • 2:welcome.java
  • 3:cauclate_2.java
  • 总结



前言

大家在学习swing编程的可以写一下这个小项目,可以夯实一下自己的学习成果,同时可以体会一下编程的乐趣,哈哈…

java swing练手小项目,带有登录界面的简易计算器的实现。

程序运行效果如下:大家可以跟着我一起敲一下代码

这是登录界面:

Java做有界面的计算器 用java做计算器界面_Java做有界面的计算器


这是主界面:

Java做有界面的计算器 用java做计算器界面_java_02


Java做有界面的计算器 用java做计算器界面_Java做有界面的计算器_03


一、知识点介绍:

本项目主要用到了java swing图形界面编程的知识。比如java swing的各种组件;
还有事件监视器的运用:定义监视器,给组件注册监视器;
此外还有java.awt的给组件绘制背景图片的相关知识;

二、代码实现:完成此项目,我一共创建了三个java源文件。

1:Myjpanel.java

这是自定义的一个组件类,它继承了Jpanel类,并重写了Jpanel类的protected void paintComponent(Graphics g)方法,用于创建一个Jpanel面板。

代码如下(示例):

package component;
import javax.swing.*;
import java.awt.*;
public class Myjpanel extends JPanel {
    Image image;//定义一个Iamge变量,用来存放背景图片
    //定义此类的构造方法,传递来一个Image变量
    public Myjpanel(Image image) {
        this.image = image;
    }
    //重写paintComponent方法,使得Jpanel面板,在绘制组件的同时也绘制背景图片
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        //绘制背景图片
        g.drawImage(image,0,0,this.getWidth(),this.getHeight(),null);
    }
}

2:welcome.java

此文件实现了登录界面:

package wins;
import component.Myjpanel;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

public class welcome extends Canvas {
    public static void main(String[] args) {
        try {
            new welcome().init();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //
    private int width = 512;//用于设置窗口和面板的宽度
    private int height = 371;//用于设置窗口和面板的高度
    JFrame win = new JFrame("李小枫的计算器V1.0");//初始化一个窗口对象win
    JLabel jLabel;//定义一个标签,欢迎用户使用计算器
    JButton jButton;//定义一个按钮,点击后可进入下一个界面
    JTextField name;//定义一个文本区,让用户输入用户名
    JLabel tishi;//提示用户输入用户名
    Myjpanel myjpanel;//用上面的Myjpanel类创建一个面板,用于承载上面的各种组件
    //定义一个方法,来初始化窗口的各种组件及属性
    public void init() throws IOException {
        //初始化面板,给面板传递一个图片文件,此处read()方法有异常,已在方法名出抛出
        myjpanel = new Myjpanel(ImageIO.read(new File("G:\\myJava\\1\\images\\library.jpg")));
        //设置面板的布局为空布局,便于用setBounds方法精确设置每个组建的位置
        myjpanel.setLayout(null);
        //给面板设置大小
        myjpanel.setPreferredSize(new Dimension(width,height));
        //初始化各种组件
        jLabel = new JLabel("欢迎使用计算器V1.0");
        jButton = new JButton("进入");
        name = new JTextField();
        tishi = new JLabel("请输入用户名:");
        //给jButton按钮注册监听器
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //当用户点击按钮后,就打开主界面窗口,并把用户名传递给主界面窗口
                new cauclate_2(name.getText());
                //并关闭当前窗口
                win.dispose();
            }
        });
        //给组件设置尺寸和位置
        jButton.setBounds((width-60)/2,280,60,30);
        tishi.setBounds(150,130,80,20);
        name.setBounds(250,130,90,20);
        jLabel.setFont(new Font("楷体_GB2312",Font.PLAIN,25));
        jLabel.setForeground(Color.DARK_GRAY);
        jLabel.setBounds((width-240)/2,30,240,100);
        //把组件添加到myjpanel面板中去
        myjpanel.add(jLabel);
        myjpanel.add(jButton);
        myjpanel.add(tishi);
        myjpanel.add(name);
        //设置窗口的属性,并把面板添加窗口中去
        win.setIconImage(ImageIO.read(new File("G:\\myJava\\1\\images\\Apps.png")));
        win.add(myjpanel);
        win.pack();
        win.setSize(width,height);
        win.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width-width)/2,(Toolkit.getDefaultToolkit().getScreenSize().height-height)/2);
        win.setVisible(true);
        win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }

}

3:cauclate_2.java

此文件实现了计算界面:

package wins;

import component.Myjpanel;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;

public class cauclate_2 {
    //设置构造方法,接收上个窗口的用户名,作为新窗口的title
    public cauclate_2(String name) {
        try {
            username = name;
            init();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //设置窗口和组件
    JFrame win = new JFrame();
    private int width = 512;
    private int height = 371;
    JTextField num1;
    JTextField num2;
    JButton jButton;
    Myjpanel myjpanel;
    JLabel answer;
    JComboBox jComboBox;//选项框用来存放运算符
    double result;
    String s1,s2,username;//定义字符串在监视器中使用
    public void init() throws IOException {
        myjpanel = new Myjpanel(ImageIO.read(new File("G:\\myJava\\1\\images\\library.jpg")));
        num1 = new JTextField(5);//让用户输入第一个数
        num2 = new JTextField(5);//让用户输入第二个数
        jButton = new JButton("=");//点击这个按钮进行运算
        answer = new JLabel("结果");//显示运算结果
        //创建JComBox组件存放运算符
        jComboBox = new JComboBox();
        jComboBox.addItem("选择运算符");
        //设置运算符,并添加到jCombox组件中
        String[] fuhao = {"+","-","*","/"};
        for (int i = 0; i < fuhao.length; i++) {
            jComboBox.addItem(fuhao[i]);
        }
        //给运算按钮注册监视器
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //先获取文本框的字符串
                s1 = num1.getText();
                //再把字符串转换成double型变量进行数学运算
                Double n1 = Double.parseDouble(s1);
                s2 = num2.getText();
                Double n2 = Double.parseDouble(s2);
                //获取运算符
                String f = jComboBox.getSelectedItem().toString();
                //根据相应的运算符进行运算
                switch (f) {
                    case "+" : {
                        result = n1 + n2;
                        //把运算结果显示到answer组件上
                        answer.setText(String.valueOf(result));
                        break;
                    }
                    case "-" : {
                        result = n1 - n2;
                        answer.setText(String.valueOf(result));
                        break;
                    }
                    case "*" : {
                        result = n1 * n2;
                        answer.setText(String.valueOf(result));
                        break;
                    }
                    case "/" : {
                        result = n1 / n2;
                        answer.setText(String.valueOf(result));
                        break;
                    }
                    case "选择运算符" : {
                        //提示用户选择运算符
                        JOptionPane.showMessageDialog(null,"请选择正确的运算符","提示框",JOptionPane.WARNING_MESSAGE);
                        break;
                    }
                }
            }
        });
        //设置窗口和面板属性,并把组件添加到面板中,把面板添加到窗口中
        win.setLayout(new FlowLayout());
        myjpanel.setPreferredSize(new Dimension(width,height));//设置面板尺寸
        myjpanel.add(num1);
        myjpanel.add(jComboBox);
        myjpanel.add(num2);
        myjpanel.add(jButton);
        myjpanel.add(answer);
        win.add(myjpanel);
        win.setTitle("欢迎:"+username);
        win.setIconImage(ImageIO.read(new File("G:\\myJava\\1\\images\\Apps.png")));//设置窗口小图标
        win.setBounds((Toolkit.getDefaultToolkit().getScreenSize().width-width)/2,(Toolkit.getDefaultToolkit().getScreenSize().height-height)/2,width,height);
        win.setVisible(true);
        win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}