Part01 ☀️

YangeIT大约 16 分钟JDKIdeaSwingGui

Part01 ☀️

课程内容

  • 编程环境安装
    • JDK安装Java运行环境
    • Idea工具安装编码工具
    • Idea编程插件提高编码速度!
  • 项目搭建
    • 项目说明和创建项目
    • 面向对象语法回顾
    • Swing介绍和常用组件介绍
    • 登录页面实现
    • 登录逻辑实现
    • 注册逻辑实现

1. 实训编码的环境1

实训编码的环境

image
image

通过网盘分享的文件:软件资料 链接: https://pan.baidu.com/s/1Jz8_GRFO6UMBNFJU5NJEZQ?pwd=c2gbopen in new window 提取码: c2gb

代码操作

🎯 JDK

  1. JDK是 java 运行环境配置的工具包,能够是 java 程序运行更加方便顺畅,帮助用户进行编程开发时代码数据库调用,

  2. 安装 JDK 是学习 java 程序语言的第一步

  3. JDK 是整个 java 程序的核心,包含 java 运行环境、java 工具和 java 基础类库等,是 java 语言开发工作者必备的工具,让编程更加高效和简单。

  4. 安装和教程如下:

image
image

jdk-11.0.20_windows-x64_bin是JDK11的版本

jdk-8u162-windows-x64.exe是JDK8的版本

  1. 说明:
    • 安装 JDK 后,配置环境变量 JAVA_HOME,并且在cmd窗口中,输入java -version 提示如下图

      验证是否安装JDK,并且配置好环境变量
      验证是否安装JDK,并且配置好环境变量
Java版本列表
Java版本列表
  • Java 现在发布的版本很快,有很多版本,但是真正会被大规模使用的是 3 年一个的 LTS 版本。每 3 年发布一个 LTS(Long-Term Support),长期维护版本。意味着只有Java 8 ,Java 11, Java 17,Java 21 才可能被大规模使用。
  • 企业开发中主流都是使用 jdk8或者JDK11

🎯 Idea

  1. IDEA 全称 IntelliJ IDEA,是 java 编程语言的集成开发环境
  2. IntelliJ 在业界被公认为最好的 Java 开发工具,尤其在AI代码助手、代码自动提示、重构、JavaEE 支持、各类版本工具(git、svn 等)、JUnit(单元测试)、代码分析、 创新UI设计等方面的功能非常好用。
  3. IDEAJetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版还支持 HTML,CSS,PHP,MySQL,Python
image
image
image
image
  1. 安装和教程如下:
2023版本
2023版本

😃 安装任何一个版本都可以,编码都是一样的哦,无非就是新版本的支持的插件稍微多一些,皮肤跟好看一点

  1. 安装注意事项:
  • 安装 idea 后,会提示是否试用,可以选择试用(30 天)
  • 在安装 Idea 后,在 Idea 中配置 jdk

🎯 截图贴图软件

Snipaste 是一个简单但强大的贴图工具,同时也可以执行截屏、贴图、标注等功能。

你可以将代码的主要思路和语法,截图贴在屏幕的右上角上,方便你随时查看,提高编码效率

  • 安装方式:压缩包解压缩后,点击启动程序即可使用(右下角会出现图标),不需要安装。
  • 快捷键:
    • 截屏 :默认为 F1
    • 贴图 :默认为 F3

总结

课堂作业

  1. 参考上述讲义,完成必备软件!🎤

如果不清楚自己是否装了,可以举手问焱哥

2. Idea编程常用插件

Idea编程常用插件

🎯 TongYi

通义灵码,你的智能编码助手。你可以问我关于编码相关的问题,我们一起更高效率、更高质量地完成编码工作

安装界面
安装界面
使用界面
使用界面
使用场景
使用场景

用过的,都说好!👍

🎯 自动导包的设置

导包场景
导包场景

可以这样设置👇

自动导包的设置图
自动导包的设置图

3. 项目搭建 ✏️ 🍐 ❤️

3.1 项目说明和创建项目

项目说明和创建项目

image
image
image
image

进入Idea的欢迎页面,点击创建项目,具体的步骤如下:

image
image
image
image

在src文件夹下,创建com.it文件包(选中src文件夹,选择右键,新建,选择包(Package),输入com.it,回车即可)

image
image

在项目的文件夹下,创建lib文件夹(和src目录同级),导入hutool-all-5.7.20.jar这个第三方的糊涂工具包,用来持久化数据到本地的(这个文件焱哥发群里)

image
image

然后在com.it文件包下,依次创建frame(窗口类包)、pojo(实体类包)、util(工具类包)等包,和App.java(启动类)文件,具体情况如下

image
image

将下列的类,复制到对应的包中,具体如下: 用户类,工作量类,工具类


public class User {
    private String id;
    private String username;
    private String password;
    private String role;
  
 //todo 需要补充空参构造和全参构造,并且get和set方法
}


public class Workload {
    private String id;//  工作量id
    private String teacher;//  教师用户名
    private String workDate;// 工作量日期
    private float hours;// 工作量耗时
    private String description;//  工作描述
//todo 需要补充空参构造和全参构造,并且get和set方法

}

注意上述的实体类要使用快捷键补充补充空参构造和全参构造,并且get和set方法 👈

工具类DataUtil焱哥直接发群里了,直接复制粘贴到util包即可,不需要自己写,如下图:

image
image

在lib下创建workloads.txt和users.txt文件,导入如下内容👇

workloads.txt

c5b6f7c6d8ed4dd19a9263278c81eff0#lisi#2025-06-06#4.0#监考
0adc6136214f45729c650de389840190#lisi#2025-06-06#5.0#上课
7d1b95bc4c2d41129b03a5aa752658e2#wangwu#2025-06-06#5.0#上公选课

users.txt

920ffa13a6474cfeb32490c782649dac#admin#123456#admin

上面这些数据是初始数据,后续会通过数据库来存储,这里先使用文本文件来存储。

image
image

接着在frame包中,创建LoginFrame类,然后在App.java中,创建一个LoginFrame对象,启动登录页面,具体效果如下:

/**
 * 启动类
 */
public class App {

    public static void main(String[] args) {
        // 确保在事件调度线程中运行Swing组件
        SwingUtilities.invokeLater(() -> {
            try {
                // 设置系统外观
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                // 创建并显示登录窗口
                LoginFrame loginFrame = new LoginFrame();
                loginFrame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, "启动失败: " + e.getMessage(),
                        "错误", JOptionPane.ERROR_MESSAGE);
            }
        });
    }

}

登录页LoginFrame类,具体代码如下:

public class LoginFrame extends JFrame {
    public LoginFrame() {
        //  设置标题和图标
        setTitle("教师工作量管理系统 - 登录");
        //  设置大小
        setSize(350, 250);
        // 设置关闭按钮
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //传入 null 时,表示相对于屏幕中央位置进行定位。
        setLocationRelativeTo(null);
    }
}

整体项目结构如下:

image
image

最后启动App类中的main方法,观察是否有引用界面出现,如果有,则说明项目搭建成功!

image
image

至此,项目搭建完成!接下来会使用面向对象和Java常用语法来完成项目!🚀

总结

课堂作业

  1. 参考上述讲义,完成项目说明和创建项目!🎤

完成后,将运行截图发到群内,有加分哦!

3.2 面向对象语法回顾

面向对象语法回顾

在util包下创建JavaBasicsDemo类,来回顾面向对象的语法和Java编写常用的语法,具体如下: 0. 输出语句和main方法

  1. 字符串(长度,判断是否为空,包含某个字段,等于某个字符串)
  2. 逻辑判断(if,else)
  3. 集合(ArrayList,for循环)
  4. 面向对象(类,构造函数,方法,get和set方法)
  5. 集合装对象(ArrayList装对象,for循环遍历对象,get和set方法)
  6. 继承和实现

参考代码:👇

public class JavaBasicsDemo {
    public static void main(String[] args) {
        // 0. 输出语句
        System.out.println("Hello, Java Basics!");

        // 字符串操作
        String str = "Hello World";
        System.out.println("字符串长度: " + str.length());
        System.out.println("字符串是否为空: " + str.isEmpty());
        System.out.println("字符串是否包含 'World': " + str.contains("World"));
        System.out.println("字符串是否等于 'Hello World': " + str.equals("Hello World"));

        // 逻辑判断
        int num = 10;
        if (num > 0) {
            System.out.println(num + " 是正数");
        } else if (num < 0) {
            System.out.println(num + " 是负数");
        } else {
            System.out.println(num + " 是零");
        }

        // 集合(ArrayList)操作(存储简单数据类型示例,这里用字符串)
        ArrayList<String> stringList = new ArrayList<>();
        stringList.add("Apple");
        stringList.add("Banana");
        stringList.add("pear");
        System.out.println("遍历字符串集合:");
        for (int i = 0; i < stringList.size(); i++) {
            System.out.println(stringList.get(i));
        }

        // 面向对象 - 集合装对象(ArrayList装Person对象)
        ArrayList<Person> personList = new ArrayList<>();
        personList.add(new Person("Alice", 25));
        personList.add(new Person("Bob", 30));

        System.out.println("遍历Person对象集合:");
        for (int i = 0; i < personList.size(); i++) {
            Person person = personList.get(i);
            System.out.println("姓名: " + person.getName() + ", 年龄: " + person.getAge());
            // 可以尝试修改对象属性(通过set方法)
            person.setName("Tom" + i);
            person.setAge(person.getAge() + 1);
            System.out.println("修改后 - 姓名: " + person.getName() + ", 年龄: " + person.getAge());
        }
    }
}


// 定义一个简单的Java类,包含了属性、构造函数、get和set方法
class Person {
    private String name;
    private int age;

    // 构造函数
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // get方法
    public String getName() {
        return name;
    }

    // set方法
    public void setName(String name) {
        this.name = name;
    }

    // get方法
    public int getAge() {
        return age;
    }

    // set方法
    public void setAge(int age) {
        this.age = age;
    }
}

接着在util包下创建JavaBasicsDemo2类,来回顾继承和实现 等语法,具体如下:


public class JavaBasicsDemo2 {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();

        dog.makeSound(); // 输出: Dog barks.
        cat.makeSound(); // 输出: Cat meows.

        // 调用从父类继承的方法
        ((Dog) dog).breathe(); // 输出: Mammal is breathing.
        ((Cat) cat).breathe(); // 输出: Mammal is breathing.
    }
}

//接口是一种规范,它定义了一组行为但不提供具体的实现。类可以实现接口,并根据需要来具体实现这些行为。
interface Animal {
    void makeSound(); // 动物发出声音的方法
}

class Mammal {
    public void breathe() {
        System.out.println("Mammal is breathing.");
    }
}
//继承允许一个类(子类)基于另一个类(父类)来构建,子类可以复用父类的属性和方法,并可以重写或扩展功能。
// 子类 Dog 实现接口并继承父类 Mammal
class Dog extends Mammal implements Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks.");
    }
}

// 子类 Cat 实现接口并继承父类 Mammal
class Cat extends Mammal implements Animal {
    @Override
    public void makeSound() {
        System.out.println("Cat meows.");
    }
}


总结

课堂作业

  1. 参考上述讲义,完成面向对象语法回顾练习,熟悉对象和集合!🎤

完成后,将练习代码截图发到群内,有加分哦!

3.3 Swing介绍和常用组件介绍

Swing介绍和常用组件介绍

image
image

接下来,我们使用Swing来创建一个简单的GUI界面,包含以下组件:JFrame,JPanel, JLabel,JTextField,JTextArea,JButton,JComboBox,GridLayout,BorderLayout,FlowLayout写一个入门案例

image
image

布局管理器

  • BorderLayout:将组件放置在窗体的不同区域(北、南、东、西、中)。
  • FlowLayout:默认按顺序从左到右排列组件。
  • GridLayout:以网格形式排列组件,所有组件大小相同。

在util包下创建SimpleGUIExample类,具体代码如下:👇

public class SimpleGUIExample {
    public static void main(String[] args) {
        // 创建JFrame实例
        JFrame frame = new JFrame("GUI入门");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭按钮
        frame.setSize(500, 400);//设置窗口大小

        // 设置主布局为BorderLayout
        frame.setLayout(new BorderLayout());//设置布局 北、东、南、西、中

        // 创建顶部面板,使用FlowLayout
        JPanel topPanel = new JPanel(new FlowLayout());//设置布局 从左到右排列
        JLabel label = new JLabel("姓名:");
        JTextField textField = new JTextField(15); // 文本框
        topPanel.add(label);
        topPanel.add(textField);

        // 添加topPanel到顶部
        frame.add(topPanel, BorderLayout.NORTH);//添加到顶部(北)

        // 创建中间面板,使用GridLayout(行数,列数)
        JPanel centerPanel = new JPanel(new GridLayout(2, 1));

        JTextArea textArea = new JTextArea(5, 20);
        textArea.setToolTipText("这里可以写很多文字!");
        JScrollPane scrollPane = new JScrollPane(textArea); // 增加滚动条支持
        centerPanel.add(scrollPane);

        String[] options = {"雷电", "暴风", "真火"};
        JComboBox<String> comboBox = new JComboBox<>(options);
        centerPanel.add(comboBox);

        // 添加centerPanel到中部
        frame.add(centerPanel, BorderLayout.CENTER);

        // 创建底部面板,使用FlowLayout
        JPanel bottomPanel = new JPanel(new FlowLayout());
        JButton button = new JButton("提交");
        button.addActionListener((ActionEvent e) -> {
            String name = textField.getText();
            String des = textArea.getText();
            String selected = (String) comboBox.getSelectedItem();
            //弹出Dialog 将上面三个信息展示出来
            JOptionPane.showMessageDialog(frame, "姓名:" + name + "\n描述:" + des + "\n类别:" + selected);
        });
        bottomPanel.add(button);

        // 添加bottomPanel到底部(南)
        frame.add(bottomPanel, BorderLayout.SOUTH);

        // 显示窗口
        frame.setVisible(true);
    }
}

运行结果如下:

image
image

至此,我们通过一个入门案例,熟悉了Swing的基本用法,接下来,我们将进一步学习Swing的常用组件,如:面板、标签、文本框、密码框、按钮等,并学习如何使用布局管理器来布局这些组件。接下来练习一下吧!! 👇

总结

课堂作业

  1. 参考上述讲义,完成Swing介绍和常用组件的学习,理解其作用!🎤
  2. 回答图解中各个组件的作用!🎤

3.4 登录页面实现

登录页面实现

上节课我们熟悉了swing的各种组件,接下来我们使用swing来创建一个登录页面,let's go!

1. 页面和组件说明

登录页面
登录页面

本节主要实现登录页面的搭建,在搭建页面布局过程中,需要用到诸多组件,如:面板、标签、文本框、密码框、按钮等,这些组件都是 Swing 提供的,下面我们一一介绍这些组件。

  • 窗口类 :JFrame,窗口类是 Swing 中最基础的类,用于创建窗口,可以设置窗口的大小、位置、标题等属性。
  • 面板: JPanel,面板是 Swing 中最基础的容器,可以用来容纳其他组件,如:标签、文本框、按钮等。
  • 标签: JLabel,标签用于显示文本或图像,可以设置文本内容、字体、颜色等属性。
  • 文本框 :JTextField,文本框用于输入单行文本,可以设置文本框的长度、是否可编辑等属性。
  • 密码框 :JPasswordField,密码框用于输入密码,输入的字符会自动隐藏,可以设置密码框的长度、是否可编辑等属性。
  • 按钮 :JButton,按钮用于触发事件,可以设置按钮的文本、图标、背景色等属性。

2. 核心代码

public class LoginFrame extends JFrame {
    //  用户名输入框
    private JTextField usernameField;
    // 密码输入框
    private JPasswordField passwordField;
    
    public LoginFrame() {
        //  设置标题和图标
        setTitle("教师工作量管理系统 - 登录");
        //  设置大小
        setSize(350, 250);
        // 设置关闭按钮
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //传入 null 时,表示相对于屏幕中央位置进行定位。
        setLocationRelativeTo(null);

        // 创建面板
        JPanel panel = new JPanel(new GridLayout(4, 1, 10, 10));

        //  设置边框
        panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
        
        // 用户名
        JPanel userPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        userPanel.add(new JLabel("用户名:"));
        usernameField = new JTextField(30);
        userPanel.add(usernameField);
        panel.add(userPanel);
        
        // 密码
        JPanel passPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        passPanel.add(new JLabel("密  码:"));
        passwordField = new JPasswordField(30);
        passPanel.add(passwordField);
        panel.add(passPanel);
        
        //  登录按钮
        JPanel btnPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
        JButton loginBtn = new JButton("登录");
        // 添加点击事件
        loginBtn.addActionListener(e -> login());

        JButton registerBtn = new JButton("注册");
        // 添加点击事件
        registerBtn.addActionListener(e -> register());

        //  添加按钮
        btnPanel.add(loginBtn);
        btnPanel.add(registerBtn);
        panel.add(btnPanel);
        //  添加面板
        add(panel);
    }


    private void register() {
      //todo 注册逻辑在这里写
        System.out.println("点击注册");
    }

    private void login() {
       //todo 登录逻辑在这里写
        System.out.println("点击登录");
    }
}























 
 
 
 
 


 
 
 
 
 





 



 


 
 
 















3. 运行项目,观察运行界面

运行指示
运行指示
运行结果
运行结果

总结

课堂作业

  1. 参考上述讲义,完成登录页面的搭建!

完成后,将结果截图发到群内,有加分哦!

3.5 注册逻辑实现

注册逻辑实现

好的,使用组件完成了登录注册页面后,接下来我们来实现注册逻辑,首先我们来看下注册逻辑的流程图:

1. 注册逻辑的流程图

image
image
image
image

2. 注册逻辑核心代码

/**
 * 注册
 */
private void register() {
    // 1. 获取用户名和密码
    String username = usernameField.getText();
    String password = new String(passwordField.getPassword());
    // 2.  校验用户名和密码
    if (username.isEmpty() || password.isEmpty()) {
        JOptionPane.showMessageDialog(this, "用户名和密码不能为空");
        return;
    }
    // 3. 校验用户是否存在
    User user = DataUtil.getUserByUsername(username);
    // 4. 用户已存在
    if (user != null) {
        JOptionPane.showMessageDialog(this, "用户已存在");
        return;
    }
    // 5.将用户信息持久化到本地存储中
    user = new User();
    user.setId(String.valueOf(System.currentTimeMillis()));
    user.setUsername(username);
    user.setPassword(password);
    user.setRole("teacher");
    DataUtil.saveUser(user); //  保存用户信息
    // 6. 提示用户注册成功
    JOptionPane.showMessageDialog(this, "注册成功,请点击登录");
}

3. 注册逻辑测试

测试页面
测试页面
数据文件
数据文件

至此,注册逻辑就完成了,是不是很简单!,完成课堂作业吧!!

总结

课堂作业

  1. 参考上述讲义,完成注册逻辑实现!

完成后,将结果截图发到群内,有加分哦!

3.6 登录逻辑实现

登录逻辑实现

1. 登录逻辑的流程图

image
image

在完成注册后,接下来就可以进行登录了,登录逻辑的流程图如下:

登录逻辑的流程图
登录逻辑的流程图

2.登录逻辑核心代码

private void login() {
    String username = usernameField.getText();
    String password = new String(passwordField.getPassword());

    // 检查用户名和密码是否为空
    if (username.isEmpty() || password.isEmpty()) {
        JOptionPane.showMessageDialog(this, "用户名和密码不能为空");
        return;
    }
    //  查询用户
    User  user = DataUtil.getUserByUsername(username);
    if (user == null) {
        JOptionPane.showMessageDialog(this, "用户不存在");
        return;
    }
    if (!password.equals(user.getPassword())) {
        JOptionPane.showMessageDialog(this, "密码错误");
        return;
    }
    // 登录成功
    dispose(); // 关闭登录窗口
    new MainFrame().setVisible(true); // 打开主界面

}

主界面(用户登录成功后进入)

/**
 * 主界面
 */
public class MainFrame extends JFrame {

    public MainFrame() {
        setTitle("教师工作量管理");
        setSize(800, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

}

3. 登录逻辑测试

测试页面
测试页面

经过上面的测试,登录逻辑也完成了,是不是很简单,完成课堂作业吧!!

总结

课堂作业

  1. 参考上述讲义,完成登录逻辑实现!

完成后,将结果截图发到群内,有加分哦!