滚雪球学Java(90):Java图形界面新篇章:Swing框架深度解析,真有点东西!

news2024/9/21 0:32:23

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

  我们在上一期,通过入门GUI,对其图形化界面有了一定的了解,也掌握了如何通过AWT来绘画简单的按钮事件等窗口,而今天,我们继续上期的内容,我们提到了一嘴Swing,没错,今天我们就来学它!。我们都了解在Java的世界里,图形用户界面(GUI)的开发一直是开发者们关注的焦点。从最初的AWT到Swing,Java GUI的发展经历了重要的转变。Swing它作为Java SE的一部分,以其丰富的组件库和强大的功能,成为构建跨平台桌面应用程序的首选框架。所以,我必须要掌握其旧点,再来学习迭代后的产物,我们才能掌握其精髓,真正把它学到手。

摘要

  本文我将会深入探讨Java Swing框架,从基础概念到高级特性,通过源码解析、案例分析以及应用场景的列举,全面展示Swing的强大功能和灵活性。同时,我们也会讨论Swing的优缺点,并提供实用的类代码和方法介绍,以及基于main函数的测试用例,确保读者能够快速上手并深入理解Swing。

正文

概述

  何为Swing?还是先要掌握其概念先,不然我们光会用,不会讲,还是很掉分的!它是Java的一个图形用户界面工具包,它提供了一套丰富的组件来构建具有丰富交互性的桌面应用程序。Swing是线程安全的,并且完全用Java编写,这使得它能够在任何支持Java的平台上运行。

  那你们可有想过几个问题,Swing为何能够在众多GUI框架中脱颖而出,并被广泛应用于各种场景呢?这主要得益于Swing的几个关键特性和优势,下面我们来通俗易懂地分析一下。

跨平台的通用性

  首先,Swing是Java的一部分,这意味着它天然具有跨平台的特性。开发者只需编写一次代码,即可在Windows、macOS、Linux等多种操作系统上运行,无需为每个平台单独开发或适配。这一点对于需要广泛部署的企业应用尤为重要。

丰富的组件库

  Swing提供了一套完整的组件库,从基本的按钮、文本框到复杂的表格、树形结构和滑动条等,几乎涵盖了开发桌面应用程序所需的所有界面元素。这大大简化了开发过程,使得开发者可以快速构建出功能丰富的用户界面。

易于学习和使用

  对于Java开发者来说,学习和使用Swing相对容易。因为它的API设计直观,且有大量的教程、文档和社区支持。即使对于新手开发者,也能够较快地上手并开发出基本的应用程序。

强大的事件处理机制

  Swing的事件处理机制非常强大,可以轻松实现用户交互。无论是鼠标点击、键盘输入还是窗口关闭等操作,Swing都能够提供相应的事件监听器来处理这些事件,从而让应用程序能够响应用户的各种操作。

定制化和扩展性

  Swing的组件都是基于抽象的接口和类构建的,这意味着开发者可以根据自己的需求对组件进行定制化开发,甚至可以创建全新的组件。这种灵活性在需要特殊界面或功能的应用程序中非常有用。

社区和生态系统

  由于Swing是Java官方支持的GUI框架,因此它拥有一个庞大的开发者社区和成熟的生态系统。开发者可以从社区中获得帮助,找到解决方案,甚至获取到第三方库和工具来扩展Swing的功能。

Swing也有其局限性?

尽管如此,Swing也有其局限性的,比如说:

  • 性能问题:由于Swing组件是基于AWT的,它们是重量级的,这可能会导致在处理大量数据或复杂渲染时性能不如轻量级框架。
  • 外观问题:Swing的默认外观可能不如一些现代操作系统的原生应用那样吸引人,尽管可以通过更改“外观和感觉”来改善这一点。

小结

  Swing之所以流行,是因为它提供了一个稳定、跨平台且功能丰富的解决方案来开发桌面应用程序。它降低了开发成本,加快了开发速度,并提供了足够的灵活性来满足不同应用场景的需求。然而,开发者在选择Swing时也应该考虑到它的性能和外观局限,根据项目的具体需求做出合理的技术选型。

案例演示

  这里,我给大家演示个案例,光说理论,大家也会慢慢觉得枯燥,我想通过具体的应用案例,展示Swing在实际开发中的应用。例如,创建一个具有复杂布局和交互的图形界面,展示如何使用JTableJList等组件来展示数据。

案例代码

// 示例:创建一个简单的Swing窗口
public class SimpleSwingApp {
    public static void main(String[] args) {
        // 创建一个JFrame对象,它是Swing中的窗口类
        javax.swing.JFrame frame = new javax.swing.JFrame("简单Swing应用");
        
        // 设置窗口的默认关闭操作为退出程序
        // EXIT_ON_CLOSE是一个常量,表示当用户点击窗口的关闭按钮时,程序将退出
        frame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
        
        // 获取窗口的内容面板,用于添加组件
        // getContentPane()方法返回窗口的contentPane属性,它是放置组件的容器
        frame.getContentPane().add(new javax.swing.JLabel("Hello, Swing!"));
        // 创建一个JLabel对象,JLabel是Swing中的标签组件,用于显示文本或图标
        // 这里创建了一个显示"Hello, Swing!"文本的标签,并将其添加到窗口的内容面板上
        
        // 调用pack方法,它将窗口调整到正好适合其布局的组件的大小
        // 这个方法不会使窗口变大,只会根据组件的最小尺寸调整窗口大小
        frame.pack();
        
        // 设置窗口为可见状态
        // setVisible(true)方法将使窗口显示在屏幕上
        frame.setVisible(true);
    }
}

代码解析

  根据如上案例演示,在此我给大家进行深入详细的捋一捋测试代码的全过程,以便于更多的同学能够加深印象并且把它吃透。

  如上案例代码演示了如何使用Swing库创建一个简单的窗口应用程序。Swing是Java的一个图形用户界面工具包,它是AWT(Abstract Window Toolkit)的扩展,提供了更丰富的组件和更好的事件处理机制。下面我们来逐行解析这段代码:

  1. 创建窗口:使用JFrame类创建了一个窗口实例,这是Swing中用于表示窗口的组件。

  2. 设置窗口标题:通过构造函数传递字符串参数"简单Swing应用",设置窗口的标题。

  3. 设置默认关闭操作:使用setDefaultCloseOperation方法并传入JFrame.EXIT_ON_CLOSE,这样当用户尝试关闭窗口时,程序会安全退出。

  4. 添加组件:通过调用getContentPane().add方法,将一个JLabel组件添加到窗口中。JLabel是一个用于显示文本或图标的标签组件,这里显示的是"Hello, Swing!"。

  5. 调整窗口大小:调用pack方法,根据窗口中组件的所需空间自动调整窗口的大小,使得窗口既不会过大也不会过小。

  6. 显示窗口:最后,通过setVisible(true)方法使窗口可见,用户可以在屏幕上看到这个窗口。

源码讲解

  • Swing的优势:与AWT相比,Swing提供了更多的组件和更好的事件处理机制,同时还支持更多的外观和感觉(look and feel)。

  • 线程安全:Swing的组件是线程安全的,可以在事件分发线程(EDT)之外安全地更新UI。

  • 轻量级组件:与AWT的重量级组件相比,Swing组件是轻量级的,这使得它们在性能上更加优越。

  • 事件处理:Swing应用程序通常是基于事件驱动的,这意味着程序的执行流程是由用户的操作来驱动的。

  • 跨平台性:Swing提供了跨平台的一致性,使得开发者可以创建在不同操作系统上具有相同外观和行为的应用程序。

  通过上述案例,我们可以看到Swing在创建GUI应用程序时的简洁性和易用性。它提供了一种快速构建用户界面的方法,同时保持了良好的性能和跨平台特性。是不是瞬间就不枯燥了!甚至还想多敲几行代码?哈哈哈哈,有的是机会,咱们还是先来学习下其应用场景先吧,掌握其可以运用在哪些地方。

应用场景案例列举

  列举Swing在不同领域的应用场景,如企业级应用、科学计算工具、教育软件等,展示Swing的广泛应用。

  Swing作为一种成熟的Java GUI框架,已经被广泛应用于多种场景中,以下是一些具体的应用案例:

  1. 企业级应用

    • 客户关系管理(CRM)系统:用于管理客户信息、跟踪销售和市场活动。
    • 企业资源规划(ERP)系统:集成财务、人力资源、供应链等多个业务流程。
    • 库存管理系统:帮助企业跟踪库存水平、订单和发货。
  2. 科学计算工具

    • 数据分析软件:用于科学数据分析,支持数据可视化和统计计算。
    • 模拟和建模工具:在物理学、生物学等领域进行复杂系统的模拟。
    • 计算化学软件:用于分子建模、化合物结构分析等。
  3. 教育软件

    • 电子学习平台:提供在线课程、教学资源和互动学习工具。
    • 教学辅助工具:帮助教师制作教学内容、进行课堂演示。
    • 科学模拟软件:用于教育目的的物理、化学实验模拟。
  4. 医疗健康应用

    • 电子健康记录(EHR)系统:管理患者信息、医疗历史和治疗计划。
    • 医学图像查看器:用于查看和分析医学影像资料,如X光片、CT扫描。
  5. 金融软件

    • 交易和投资平台:提供股票、债券等金融产品的交易和管理。
    • 风险管理工具:帮助金融机构评估和管理市场风险。
  6. 桌面游戏

    • 棋类游戏:如国际象棋、围棋等,提供人机对战或在线对战功能。
    • 策略游戏:模拟城市建设、资源管理等策略决策过程。
  7. 媒体播放器

    • 音频和视频播放器:支持多种格式的媒体文件播放。
  8. 图形和图像编辑软件

    • 照片编辑器:提供照片调整、修饰和增强功能。
    • 矢量图形编辑器:用于创建和编辑矢量图形和设计。
  9. 办公自动化软件

    • 文档编辑器:类似于文字处理软件,支持文档创建和编辑。
    • 电子表格软件:用于数据分析和表格管理。
  10. 开发工具和IDE插件

    • 代码编辑器:提供代码高亮、错误检测和自动完成功能。
    • IDE插件:增强集成开发环境的功能,如数据库管理、版本控制。

  这些案例其实可以看到,它充分展示了Swing的灵活性和多样性,适用于从简单的工具到复杂的企业级应用程序。尽管Swing可能在现代感和性能方面存在局限,但其跨平台能力和丰富的组件库使其在许多领域仍然是一个实用的选择。

优缺点分析

  Swing是Java的一个重量级图形用户界面(GUI)工具包,它提供了丰富的组件和功能来创建跨平台的桌面应用程序。以下是Swing的一些优势和局限性的分析:

优势

  1. 跨平台性:Swing完全用Java编写,可以在任何支持Java的平台上运行,无需额外的本地代码或依赖。
  2. 丰富的组件库:Swing提供了大量的组件,包括按钮、文本框、滑动条、表格、树形视图等,可以满足大多数GUI开发需求。
  3. 事件驱动编程模型:Swing采用事件驱动的编程模型,可以方便地处理用户交互,如鼠标点击、键盘输入等。
  4. 线程安全:Swing是线程安全的,这意味着可以在任何线程中更新GUI组件,只要遵循Swing的线程规则。
  5. 可扩展性:Swing的组件可以通过继承和组合来扩展,开发者可以创建自定义的组件来满足特定的需求。
  6. 集成性:Swing可以与Java的其他部分,如AWT、Java 2D等无缝集成,提供一致的编程体验。

局限性

  1. 性能问题:Swing组件是基于重量级组件的,这可能导致在某些情况下性能不如轻量级组件或本地GUI框架。
  2. 外观和感觉:虽然Swing提供了一些不同的“外观和感觉”(Look and Feel),但它的外观可能不如一些现代操作系统的原生GUI组件现代和吸引人。
  3. 复杂性:Swing的API相对复杂,对于初学者来说可能有一定的学习曲线。
  4. 缺乏现代UI元素:Swing没有内置对一些现代UI元素的支持,如圆角边框、阴影、动画等,这些通常需要额外的工作或第三方库来实现。
  5. 依赖Java运行时环境:由于Swing依赖Java运行时环境(JRE),这可能会增加应用程序的部署复杂性和运行时依赖。
  6. 社区和生态系统:虽然Swing有着悠久的历史和稳定的社区,但与一些更现代的框架相比,它的生态系统可能没有那么活跃和创新。

小结

  Swing是一个功能强大且成熟的GUI工具包,特别适合需要跨平台解决方案的Java应用程序。它的组件库和事件处理机制为构建复杂的桌面应用程序提供了坚实的基础。然而,它的性能、外观和现代UI元素的支持可能不如一些现代的本地GUI框架。大家在使用它时,选择Swing时应该权衡这些优势和局限性,并考虑项目的具体需求。对于需要高度自定义和跨平台兼容性的应用程序,Swing仍然是一个不错的选择。

类代码方法介绍

  这里,我给大家解读一波源码,详细介绍下Swing中的关键类和方法,如ActionListenerMouseListener等,以及如何使用它们来处理用户交互。

  Swing框架提供了丰富的类和接口来处理用户交互,以下是一些关键的类和方法的介绍,以及如何使用它们来处理用户交互:

1. ActionListener

ActionListener接口用于监听动作事件,比如按钮点击。当用户点击一个按钮时,会触发actionPerformed方法的执行。

JButton button = new JButton("点击我");
button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("按钮被点击了!");
    }
});

2. MouseListener

MouseListener接口用于监听鼠标事件,包括鼠标点击、鼠标进入、鼠标退出、鼠标按下和鼠标释放等事件。

JButton button = new JButton("鼠标事件");
button.addMouseListener(new MouseListener() {
    public void mouseClicked(MouseEvent e) {
        System.out.println("鼠标点击");
    }
    // 其他鼠标事件方法...
});

3. MouseMotionListener

MouseMotionListener接口用于监听鼠标移动和鼠标拖动事件。这在绘图应用或需要跟踪鼠标位置的场景中非常有用。

JPanel panel = new JPanel();
panel.addMouseMotionListener(new MouseMotionListener() {
    public void mouseDragged(MouseEvent e) {
        System.out.println("鼠标拖动到:" + e.getX() + ", " + e.getY());
    }
    public void mouseMoved(MouseEvent e) {
        System.out.println("鼠标移动到:" + e.getX() + ", " + e.getY());
    }
});

4. KeyListenerKeyAdapter

KeyListener接口用于监听键盘事件,如按键按下、释放和类型。KeyAdapterKeyListener的一个便捷适配器,允许你只实现需要的方法。

JTextField textField = new JTextField();
textField.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
        System.out.println("按键被按下:" + e.getKeyCode());
    }
    // 其他键盘事件方法...
});

5. ChangeListener

ChangeListener接口用于监听状态改变事件,这通常用于像滑动条(JSlider)这样的组件,当它们的值发生变化时会触发事件。

JSlider slider = new JSlider();
slider.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        System.out.println("滑动条的值改变为:" + slider.getValue());
    }
});

6. ItemListener

ItemListener接口用于监听项事件,比如下拉列表(JComboBox)选项的改变。

JComboBox<String> comboBox = new JComboBox<>(new String[]{"选项1", "选项2", "选项3"});
comboBox.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            System.out.println("选中了:" + e.getItem());
        }
    }
});

使用这些监听器

要使用这些监听器,你通常需要实现相应的接口,并在组件上注册你的监听器实例。当事件发生时,相应的方法会被自动调用,允许你执行特定的操作。

这些监听器是Swing中处理用户交互的核心,通过它们,你可以创建响应用户输入的动态和交互式应用程序。

测试用例

  讲解到这,我想大家估计又手痒痒了,这不,马上安排下去,我们通过代码来实现一个简单的Java Swing应用程序,如下是我写的基础示例,目的是创建一个窗口,窗口中有一个标签和一个按钮。当用户点击按钮时,会在控制台打印一条消息,代码如下:

测试代码

  完整测试代码如下,仅供参考:

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024年7月9日15:01:32
 */
public class SwingTest {
    public static void main(String[] args) {
        // 创建Swing窗口
        JFrame frame = new JFrame("Swing基础Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setLocationRelativeTo(null); // 居中显示窗口

        // 创建面板
        JPanel panel = new JPanel();
        frame.setContentPane(panel);

        // 创建标签
        JLabel label = new JLabel("欢迎使用Swing基础Demo!");
        panel.add(label);

        // 创建按钮
        JButton button = new JButton("点击我");
        // 为按钮添加事件监听器
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("按钮被点击了!");
            }
        });
        panel.add(button);

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

  这段代码展示了Swing应用程序的基础结构,包括:

  • 创建JFrame窗口。
  • 设置窗口的默认关闭操作和大小。
  • 创建JPanel作为容器来添加其他组件。
  • 添加JLabel和JButton组件到面板上。
  • 为按钮添加ActionListener,当按钮被点击时执行相应的动作。
      要运行这个示例,你需要有Java开发环境配置好。将上述代码保存为.java文件,例如命名为BasicSwingDemo.java,然后使用javac编译器编译它,并使用java命令运行编译后的类文件。

测试结果

  根据如上的测试用例,作者在本地进行测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加其他的测试数据或测试方法,以便于进行熟练学习以此加深知识点的理解。

测试代码解析

  接着我将对上述代码进行详细的一个逐句解读,希望能够帮助到同学们,能以更快的速度对其知识点掌握学习,这也是我写此文的初衷,授人以鱼不如授人以渔,只有将其原理摸透,日后应对场景使用,才能得心应手,所以如果有基础的同学,可以略过如下代码分析步骤,然而没基础的同学,还是需要加强对代码的理解,方便你深入理解并掌握其常规使用。

  上述测试案例是一个Java Swing应用程序的基础示例,它展示了如何创建一个简单的图形用户界面(GUI)。接下来,我将对代码进行逐行解析,并提供一些背景信息和解释。

包声明

package com.secf.service.action.hpy.hys.day90;

  这行代码声明了类的包名,它定义了类的命名空间。在Java中,包用于组织类和接口,防止命名冲突。这个特定的包路径应该反映您的项目结构和组织方式。

导入语句

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

  这些行导入了Swing库中需要的类和接口。javax.swing.* 是一个通配符导入,它导入了javax.swing包中的所有类。ActionEventActionListener是事件处理相关的类,用于监听和响应用户动作。

类声明和注释

/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024年7月9日15:01:32
 */
public class SwingTest {

  这里定义了一个名为SwingTest的公共类,它包含了主程序的入口点main方法。类上方的注释提供了作者、来源和日期信息,这是一种常见的做法,用于记录代码的元数据。

main方法

public static void main(String[] args) {

  这是Java程序的入口点。main方法是一个静态方法,它接受一个字符串数组作为参数。

创建和配置窗口

JFrame frame = new JFrame("Swing基础Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);

  这些行创建了一个JFrame对象,它是Swing中用于表示窗口的类。setDefaultCloseOperation设置了窗口的默认关闭操作,这里设置为JFrame.EXIT_ON_CLOSE,意味着当用户关闭窗口时,程序将退出。setSize设置了窗口的大小,而setLocationRelativeTo使窗口居中显示。

创建面板

JPanel panel = new JPanel();
frame.setContentPane(panel);

  这里创建了一个JPanel对象,它是Swing中的一个容器,用于容纳其他组件。setContentPane方法将面板设置为窗口的内容面板。

添加组件

JLabel label = new JLabel("欢迎使用Swing基础Demo!");
panel.add(label);

  创建了一个JLabel对象,它是一个标签组件,用于显示文本或图标。然后,标签被添加到面板中。

JButton button = new JButton("点击我");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("按钮被点击了!");
    }
});
panel.add(button);

  创建了一个JButton对象,它是一个按钮组件。为按钮添加了一个ActionListener,当按钮被点击时,会覆盖actionPerformed方法,执行打印消息的操作。然后,按钮也被添加到面板中。

显示窗口

frame.setVisible(true);

  最后,调用setVisible方法并传递true参数,这会使窗口可见。

小结

  这段代码展示了Swing应用程序的基础结构,包括创建窗口、添加组件、设置布局和处理事件。通过这个示例,您可以了解如何使用Swing来构建简单的GUI应用程序。要运行这个程序,您需要有Java开发环境,并按照前面提到的步骤编译和运行代码。

小结

  本次教程以一个简单的Swing应用程序为例,逐步解析了代码的每个部分,确保了即便是初学者也能够跟上节奏,理解并掌握关键概念。通过实际操作和测试,我们验证了代码的功能,并且通过bug菌提供的图解,直观地感受到了程序的运行效果。

  学习过程中,我们强调了代码的逐句解读,这不仅帮助我们加深了对Swing组件和事件处理机制的理解,也锻炼了我们分析问题和解决问题的能力。我的教程以其通俗易懂的语言和深入浅出的解析,使得即便是复杂的技术知识也变得亲切和易于掌握,这将是对大家最有力的保障。

总结

  在本次的Java Swing基础教程中,大家跟随我的引导,深入了解了Swing框架的构建和应用。从创建基础窗口到添加交互组件,每一个步骤都通过实例代码进行了详细的演示和解释。我们一起学习了如何使用JFrame创建窗口,利用JPanel组织界面布局,并通过JLabelJButton等组件丰富用户交互。事件监听器的添加,特别是ActionListener的使用,让我们得以响应用户的点击操作,实现了基本的交互功能。

  通过案例分析,我们看到了Swing在实际开发中的多样化应用,无论是企业级应用还是教育软件,Swing都展现出了其跨平台和组件丰富的优势。同时,我们也认识到了Swing在性能和现代UI设计方面的局限性,这要求我们在项目选型时做出合理的判断。

  此外,我还提供了大量的学习资源和社区支持,通过公众号「猿圈奇妙屋」,我们可以获得更多的学习资料和行业动态,这对于渴望不断学习和成长的开发者来说,无疑是宝贵的财富。

… …

  ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070252.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决MySQL的PacketTooBigException异常问题

一、背景 在大数据量导入mysql的时候&#xff0c;提示错误Cause: com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large 原因是MySQL的max_allowed_packet设置最大允许接收的数据包过小引起的&#xff0c;默认的max_allowed_packet如果不设置&…

Stable Diffusion 使用详解(9)--- 艺术字及海报融入

目录 背景 方法一 利用controlNet lineart invert depth 提示词 效果 方法二 准备蒙版 绘制大型场景艺术字 controlnet Lora 模型 效果 PS 融入 背景 如果看过上一期你应该知道如何利用layer diffusion 制作场景动漫海报&#xff0c;其实掌握这个方法后&#xf…

DFS 算法:记忆化搜索

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 往 {\color{Red} {\Huge 往} } 往 期 {\color{Green} {\Huge 期} } 期 文 {\color{Blue} {\Huge 文} } 文 章 {\color{Orange} {\Huge 章}} 章 无 此系列更新频繁&#xff0c;求各位读者点赞 关…

视频号小店:微信生态下的新零售革命者

在数字化浪潮的席卷之下&#xff0c;微信视频号凭借其独特的社交基因和庞大的用户群落&#xff0c;正悄然崛起为新零售战场上的新晋强者。特别是视频号小店体系的创立&#xff0c;为商家打造了一个集商品展现、交易促进与营销策略部署于一体的综合运营平台&#xff0c;实现了业…

网络安全中的人工智能应用

1. 引言 随着网络攻击的复杂性和频率不断增加&#xff0c;传统的安全防护措施逐渐难以应对这些威胁。人工智能&#xff08;AI&#xff09;作为一种变革性的技术&#xff0c;正在逐步成为增强网络安全的重要工具。AI通过自动化、智能化的方式&#xff0c;可以有效提高威胁检测、…

【JAVA基础】多态

文章目录 多态向上转型练习题 多态 父类的引用指向子类的对象 public class A {public String name;public int age;public void run(){ //该run()方法被覆盖System.out.println("a跑的快");}public void eat(String name){System.out.println(name"吃的很多&…

从零到一,我的AI绘画赚钱之旅:准大一新生暑假自学成才,月入学费不是梦!

大家好&#xff0c;我是即将步入大学校园的准大一新生。在这个漫长的暑假里&#xff0c;我决定学习一门新技术&#xff0c;充实自己。在一次网上冲浪的过程中&#xff0c;我偶然发现了AI绘画这个神奇的世界。以下是我在暑假期间学习AI绘画的经历&#xff0c;以及我是如何通过它…

缓存之Tair

介绍 ​ 在Tair出现之前的很长一段时间里&#xff0c;像redis、memcache这些知名NoSql数据库是不支持分布式的&#xff0c;在这样的背景下&#xff0c;由淘宝网自主开发并在2010.6开源的一个高性能、高扩展、高可靠分布式缓存&#xff0c;类似map的key/value结构&#xff0c;在…

C#实现数据采集系统-数据反写(3)ModbusTcp写入数据模块开发

写入报文分析 ModbusTcp报文详细解析见 ModbusTCP协议报文解析 写入常用的四个功能码&#xff0c;线圈 05,15&#xff08;0x0F&#xff09;,寄存器06,16&#xff08;0x10&#xff09; 详细报文如下&#xff1a; //00 01 00 00 00 06 FF 05 00 01 FF 00 写单个线圈 //00 01 …

【人工智能】AI虚拟主播制作初体验:生成数字人到视频创作全流程

文章目录 &#x1f4af;AI虚拟主播&#x1f4af;使用AI绘画工具生成数字人借助GPT生成数字人所需的提示词方案一&#xff1a;使用Midjourney生成数字人方案二&#xff1a;使用TensAI生成数字人补充方案三&#xff1a;在D-ID内直接生成数字人 &#x1f4af;使用D-ID生成数字人视…

CS1.5快捷键

《黑神话悟空》玩不起&#xff0c;玩起了23年前的cs1.5 B11&#xff1a;USP(警察自带手枪&#xff09; B12&#xff1a;Glock18(匪徒自带手枪) B13&#xff1a;Desert Eagle&#xff08;沙漠之鹰&#xff09; B14&#xff1a;P-228 B15&#xff1a;Dual Berettas&#xff08;匪…

git命令大全(git checkout ,git merge,git branch,git cherry-pick)

git stash 和git commit区别git文件状态命令手册git init git clone提交和修改git log远程仓库操作 git pull git push创建分支&#xff08;增删改查&#xff09;git checkout ,git branch ,git mergegit loggit taggit add, git stash ,git rebase,git cherry-pick git stash …

AI绘画SD三分钟入门教程!秋叶大佬8月最新的Stable Diffusion整合包V4.9来了,完整安装部署教程奉上,附各种模型插件一次性用爽!

大家好&#xff0c;我是画画的小强 前几天8月15日&#xff0c;国内AI绘画工具开源大佬更新了StableDiffusion整合包最新版本4.9&#xff0c;相关信息从图中能看到&#xff0c;本次更新后SD WebUI已经能够支持最新的AI绘画大模型SD3.0&#xff0c;以及更新了SD最强的控制插件Co…

nvm 安装老的node,npm版本

1、今天想安装一个老的node与npm版本&#xff0c;但出现问题&#xff0c;安装不了 2、后来修改settings.txt文件增加如下&#xff1a; node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror: https://npmmirror.com/mirrors/npm/ 否则因为现在访问https://nodejs.or…

Jmeter 性能测试实战教程

一、性能测试流程 进行性能测试前&#xff0c;我们首先需要了解一下性能测试大致分为哪些流程&#xff0c;这样才能保证测试过程有序开展&#xff1a; 1、性能需求分析 了解哪些业务需要&#xff08;一般都是用户量大的核心业务&#xff0c;比如登录&#xff0c;查询等功能&…

HTML5休闲小游戏《切割大师》源码,引流、刷广告利器

HTML5休闲小游戏《切割大师》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods467910.html

webpack--webpack的启用

1、创建项目目录结构 2、安装依赖 2.1 初始化项目 npm init -y 2.2 安装webpack和webpack-cli npm i webpack webpack-cli -D 2.3 打包 npx webpack ./src/main.js --modedevelopment “./src/main.js”是指定需要打包的文件 --mode是指定打包的环境--mode有两个值&#xff0c;…

【vue3|第27期】Vue Router 中的 Meta 属性:灵活控制与增强你的应用

日期&#xff1a;2024年8月23日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉在这里插入代码片得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不…

Python优化算法11——螳螂优化算法(GOA)

科研里面优化算法都用的多&#xff0c;尤其是各种动物园里面的智能仿生优化算法&#xff0c;但是目前都是MATLAB的代码多&#xff0c;python几乎没有什么包&#xff0c;这次把优化算法系列的代码都从底层手写开始。 需要看以前的优化算法文章可以参考&#xff1a;Python优化算…

销售易CRM怎么样?如何自动同步?

销售易CRM是什么&#xff1f; 销售易CRM是一款企业级CRM软件&#xff0c;它利用先进的移动互联、社交网络和云计算技术&#xff0c;提供从营销、销售到服务的一体化解决方案。销售易CRM不仅是一个软件工具&#xff0c;更是一种企业经营管理理念&#xff0c;通过智能技术的应用…