Java基础之GUI:探索图形化界面编程的魅力

一、引言

Java 的图形用户界面(GUI)编程为开发者提供了丰富的工具和组件,使得创建直观、交互性强的应用程序变得更加容易。本文将深入介绍 Java 基础中的 GUI,包括其概念、组件、布局管理器以及事件处理等方面的知识。

Java 的图形用户界面(GUI)是一种通过图形化的方式与用户进行交互的界面。它为用户提供了直观、便捷的操作方式,使得用户能够更加轻松地使用应用程序。在 Java 中,为 GUI 提供的对象都在java.awt和javax.swing两个包中。

(一)GUI 概述

  1. GUI 的定义
    • GUI 即图形用户接口(Graphical User Interface),用图形的方式显示计算机的界面,更加方便直观。
  1. Java 中 GUI 的实现
    • Java 中为 GUI 提供的对象都在java.awt和javax.swing两个包中。
      • java.awt包:Abstract Window Toolkit(抽象窗口工具包),需要调用本地系统方法实现功能,属重量级控件。
      • javax.swing包:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由 Java 实现,增加了移植性,属轻量级控件。
    • Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。

(二)布局管理器

  1. 布局的概念
    • 容器中的组件的排放方式就是布局。
  1. 常见的布局管理器
    • FlowLayout(流式布局管理器):组件按从左到右的顺序排列,这是Panel组件默认的布局管理器。
    • BorderLayout(边界布局管理器):组件按东、南、西、北、中的位置排放,默认放置在中。
    • GridLayout(网格布局管理器):组件按规则的矩阵排放。
    • GridBagLayout(网格包布局管理器):组件按非规则的矩阵排放。

(三)Component 类

  1. Component 类的定义
    • Component类是一个抽象类,是与菜单不相关的 Abstract Window Toolkit 组件的抽象超类,是一个具有图形表示能力的对象,可在屏幕上显示,并可与用户进行交互。

(四)Container 类

  1. Container 类的定义
    • Container类是Component类的一个子类,是一个可包含其他 AWT 组件的容器。
  1. Container 类的方法
    • add方法:该方法可以将指定组件追加到Container容器的尾部。

(五)Frame 类

  1. Frame 类的定义
    • Frame是带有标题和边框的顶层窗口。其默认布局为BorderLayout。
  1. Frame 类的方法
    • Frame():构造一个最初不可见的Frame新实例。
    • Frame(String title):构造一个新的、最初不可见的、具有指定标题的Frame对象。
    • void setVisible(Boolean b):根据参数b的值显示或隐藏此组件。
    • void setSize(int wid,int hei):调整组件的大小,使其宽度为wid,高度为hei,单位是像素。
    • void setLocation(int x,int y):通过此组件父级坐标空间中的x和y参数来指定新位置的左上角。
    • void setLayout(LayoutManager mgr):设置此容器的布局管理器。
    • void setTitle(String title):此窗体的标题设置为指定的字符串。
  1. 创建图形化界面步骤
    • 创建frame窗体。
    • 对窗体进行基本设置,如大小,位置,布局。
    • 定义组件。
    • 将组件通过窗体的add方法添加到窗体中。
    • 让窗体显示,通过setVisible(true)。
  1. 示例
 
import java.awt.*;
public class AwtDemo{public static void main(String[] args){//创建一个窗体Frame f=new Frame("myframe");//设置窗体的大小f.setSize(500,400);//调整窗体的位置f.setLocation(300,200);//设置窗体的布局管理器f.setLayout(new FlowLayout());//创建一个按钮Button b=new Button("mybutton");//将按钮添加到窗体中f.add(b);//设置窗体为可见f.setVisible(true);}
}

(六)事件监听机制

  1. 事件监听机制组成
    • 事件源(组件):即awt包或swing包中的那些图形界面组件。
    • 事件(Event):每一个事件源都有自已特有的对应事件和共性事件。
    • 监听器(Listener):将可以触发某一个事件的动作都已经封装到了监听器中。
    • 事件处理:引发事件后处理方式。事件源、事件和监听器在 JAVA 中都已经定义好了,直接获取其对象来用就可以了,我们要做的就是对产生的动作进行处理。
  1. 事件监听机制流程图
    • 用户对组件的操作就是一个事件,那么产生事件的组件就是事件源,接收并处理事件,与用户进行交互的行为就是事件处理器,这些处理方式都封装在监听器中。

(七)窗体事件

  1. 处理窗体事件的方法
    • 要处理窗体事件需要添加窗口监听器以监听窗口事件,可以通过addWindowListener(WindowListener l)方法添加一个窗口监听器。
  1. WindowListener 接口和 WindowAdapter 类
    • WindowListener:是一个接口,用于接收窗口事件的侦听器。旨在处理窗口事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类WindowAdapter(仅重写所需的方法)。
    • WindowAdapter:是一个抽象类,是接收窗口事件的抽象适配器类,该类实现WindowListener接口,并覆盖了该接口的所有方法,且将方法覆盖为空。此类存在的目的是方便创建侦听器对象。扩展此类可创建WindowEvent侦听器并为所需事件重写该方法。所在在创建窗口监听器时不需要去实现WindowListener接口且覆盖该接口的所有方法,只需继承WindowAdapter类并复写其中所需要的方法即可。
  1. 示例
 
import java.awt.*;
import java.awt.event.*;
public class AwtDemo2{public static void main(String[] args){//创建一个窗体Frame f=new Frame("myframe");//设置窗体的大小f.setSize(500,400);//调整窗体的位置f.setLocation(300,200);//设置窗体的布局管理器f.setLayout(new FlowLayout());//添加窗口监听器,参数是一个`WindowAdapter`的子类对象,此处采用匿名内部类的形式//此匿名内部类中只复写了`WindowAdapter`的`windowClosing`方法f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//设置窗体为可见f.setVisible(true);}
}

(八)Action 事件

  1. 处理 Action 事件的方法
    • 处理Action事件需要添加一个ActionListener监听器。添加ActionListener监听器可以用组件的addActionListener(ActionListener l)方法。
  1. ActionListener 接口
    • ActionListener:一个接口,用于接收操作事件的侦听器接口,对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed方法。
  1. actionPerformed 方法
    • actionPerformed(ActionEvent e)方法:是ActionListener的一个方法。在发生操作时调用。

二、Java GUI 基础概念

1. GUI 与 CLI 的区别

  1. GUI 介绍:Graphical User Interface(图形用户接口),用图形的方式显示计算机操作界面,方便直观。相比于 Command line User Interface(命令行用户接口),GUI 无需记忆常用命令,用户通过直观的图形界面进行操作,大大提高了易用性。例如,在日常使用的操作系统中,我们可以通过鼠标点击图标、菜单等进行各种操作,而不是像 CLI 那样需要记住特定的命令才能完成任务。
  1. CLI 介绍:Command line User Interface(命令行用户接口),需要记忆常用命令,操作不直观。对于新用户来说,CLI 的上手难度较高,因为需要记住各种命令和语法。然而,对于一些专业人士或系统管理员来说,CLI 可能更加高效,因为可以通过键盘快速输入命令来完成复杂的任务。但对于大多数普通用户而言,GUI 更加友好和易于使用。

2. Java 中的 GUI 工具包

  1. AWT 和 Swing:Java 为 GUI 提供的对象都在 java.Awt 和 javax.Swing 两个包中。AWT 是抽象窗口工具包,需要调用本地系统方法实现功能,属于重量级控件;Swing 在 AWT 的基础上建立,完全由 Java 实现,增强了移植性,属轻量级控件。

AWT(Abstract Window Toolkit)是 Java 早期的图形用户界面工具包,它提供了一组基本的 GUI 组件和窗口管理功能。由于 AWT 组件是重量级控件,它们依赖于本地系统的窗口组件,因此在不同的操作系统上可能会有不同的外观和行为。

Swing 是在 AWT 的基础上构建的一套新的图形界面系统,它提供了比 AWT 更丰富的 GUI 组件,并且完全由 Java 实现。这使得 Swing 组件具有更好的移植性,在不同的平台上可以保持一致的外观和行为。

AWT 和 Swing 之间的区别主要体现在以下几个方面:

  • 实现原理不同:AWT 的图形函数与操作系统提供的图形函数有着一一对应的关系,而 Swing 则是用纯粹的 Java 代码对 AWT 的功能进行了大幅度的扩充。
  • 运行速度不同:AWT 是基于本地方法的 C/C++ 程序,运行速度比较快;Swing 是基于 AWT 的 Java 程序,运行速度比较慢。
  • 平台表现不同:AWT 的控件在不同的平台可能表现不同,而 Swing 在所有平台表现一致。

在实际应用中,应根据具体情况选择使用 AWT 还是 Swing。对于嵌入式应用,目标平台的硬件资源有限,应用程序的运行速度至关重要,此时可以选择简单而高效的 AWT。而对于普通的基于 PC 或者工作站的标准 Java 应用,硬件资源对应用程序所造成的限制往往不是关键因素,此时可以选择功能更强大、移植性更好的 Swing。

三、布局管理器

1. 常见布局管理器介绍

Java 中的布局管理器为开发者提供了多种方式来组织和排列 GUI 组件。以下是对常见布局管理器的详细介绍:

  1. FlowLayout(流式布局管理器):从左到右的顺序排列,是 Panel 默认的布局管理器。FlowLayout 按照组件被添加到容器中的顺序来排列组件。先添加的组件出现在前面,随后添加的组件排在后面。它支持三种对齐方式 — 左对齐、居中对齐(默认值)和右对齐。对齐方式可以在创建 FlowLayout 实例时指定,还可以设置组件之间的水平和垂直间距。例如 new FlowLayout(FlowLayout.LEFT,10, 20) 会创建一个左对齐的 FlowLayout,其中组件之间的水平间距为 10 像素,垂直间距为 20 像素。在流式布局管理器中,容器会将组件按照添加顺序从左到右依次放置,当到达边界时会自动将组件放置到下一行开始的位置。
  1. BorderLayout(边界布局管理器):东、南、西、北、中,是 Frame 默认的布局管理器。BorderLayout 可以将容器划分为五个区域,分别是东、西、南、北、中,在添加组件时需要使用 add(Component comp,Object constraints) 方法。comp 表示要添加的组件,constraints 指定将组件添加到布局中的方式和位置的对象,它是一个 Object 类型,在传参数时提供 EAST,SOUTH,WEST,NORTH,CENTRE。如果在添加时,不指定添加到哪个区域,则默认添加到 CENTRE 区域,并且每个区域只能放置一个组件,如果向一个区域中添加多个组件时,后放入的组件会覆盖先放入的组件。
  1. GridLayout(网格布局管理器):规则的矩阵。GridLayout 可以把容器分成 n 行 m 列大小相等的网格,每个网格放置一个组件,按照从左往右,从上往下的顺序依次添加,放置在 GridLayout 布局管理器的组件将自动占据网格的整个区域。GridLayout 构造方法有多种,如 GridLayout()(默认只有一行,每个组件占一列)、GridLayout(int rows,int cols)(指定容器的行数和列数)以及可以指定容器的行数和列数以及组件之间的水平,垂直间距的构造方法。GridLayout 布局管理器的特点是组件的相应位置不随区域的缩放而改变,但组件的大小会随之改变,组件始终占据网格的整个区域,其缺点是忽略组件的最佳大小,所有组件的宽高都相同。
  1. CardLayout(卡片布局管理器):选项卡。卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过 CardLayout 类提供的方法可以切换该空间中显示的组件。
  1. GridBagLayout(网格包布局管理器):非规则的矩阵。

四、监听机制

  1. 事件源:awt包或者swing包中的图形界面组件,如按钮、文本框等。
  1. 事件:每个事件源都有自己特有的对应事件和共性事件。例如,按钮可能有点击事件,窗口可能有关闭事件等。
  1. 监听器:将触发事件的动作封装到监听器中。监听器可以是xxxListener或者xxxAdapter的形式。

3. 事件监听机制的使用

  1. 确定事件源(容器或组件):首先需要确定哪个图形界面组件是事件的源头。例如,一个按钮可以是事件源,当用户点击按钮时,触发一个事件。
  1. 通过事件源对象的 addxxxListener () 方法将监听器注册到该事件源上:使用事件源对象的特定方法,如addActionListener()或addWindowListener()等,将监听器注册到事件源上。这样,当事件发生时,监听器就能够接收到通知。
  1. 接收 xxxListener 的子类对象或 xxxListener 的子类 xxxAdapter 的子类对象,一般用匿名内部类来表示:在注册监听器时,可以接收xxxListener的子类对象或者xxxListener的子类xxxAdapter的子类对象。通常使用匿名内部类的形式来实现,这样可以方便地定义监听器的行为。
  1. 覆盖方法时,参数一般是 xxxEvent 类型的变量接收:在实现监听器接口的方法时,参数一般是特定类型的事件对象,如ActionEvent、WindowEvent等。通过这个事件对象,可以获取与事件相关的信息。
  1. 事件触发后会把事件打包成对象传递给变量,可通过 getSource () 或 getComponent () 获取事件源对象:当事件被触发时,事件会被打包成一个对象,并传递给监听器的方法。在方法中,可以通过getSource()或getComponent()方法获取事件源对象,从而进行进一步的处理。

五、GUI 组件的使用

1. 窗体(Frame)

Java 中的窗体(Frame)是带有标题和边框的顶层窗口。它的默认布局是边界式布局(BorderLayout)。

1. 构造方法

  • 默认情况下,创建一个 Frame 对象时,它最初是不可见的。可以使用Frame()构造一个最初不可见的 Frame 新实例;也可以使用Frame(String title)构造一个新的、最初不可见的、具有指定标题的 Frame 对象。

2. 常用方法

  • addWindowListener():添加窗口侦听器,用于监听窗口事件。例如,可以通过这个方法添加一个监听器来处理窗口关闭事件。
  • setBounds():设置位置和大小。通过指定左上角的坐标(x,y)以及宽度和高度来确定窗体在屏幕上的位置和大小。
  • setSize():设置大小,仅指定窗体的宽度和高度。
  • setLocation():设置位置,仅指定窗体左上角在屏幕上的坐标。
  • setLayout():设置布局,用于确定窗体中组件的排列方式。
  • setVisible():设置隐藏和显示,决定窗体是否可见。
  • add():向窗体中添加其他组件,如按钮、文本框等。

2. 按钮(Button)

按钮(Button)在 Java 的 GUI 中是一个常用的组件,用于触发特定的操作。

1. 构造方法

  • 可以构造一个标签字符串为空的按钮,也可以带指定标签的按钮。例如JButton()创建一个没有标题的按钮对象,JButton(String s)创建一个标题为 s 的按钮对象。

2. 常用方法

  • addActionListener():添加动作监听,当按钮被点击时触发相应的动作。
  • getLabel():获取按钮的标签,即按钮上显示的文本。
  • setLabel():设置按钮的标签,用于更改按钮上显示的文本。

3. TextField 和 TextArea

1. TextField(单行文本框)

  • TextField 是允许编辑单行文本的文本组件。
    • 构造方法包括无参数、指定列数、指定初始化文本和指定初始化文本和列数。例如JTextField()文本框的字符长度为 1;JTextField(int columns)文本框初始值为空字符串,文本框的字符长度设为 columns;JTextField(String text)文本框初始值为 text 的字符串;JTextField(String text, int columns)文本框初始值为 text,文本框的字符长度为 columns。
    • 常用方法有addActionListener()、addTextListener()、addKeyListener()、addMouseListener()等,可以为文本框添加不同类型的监听器。setText()用于在文本框中设置文本,getText()获取文本框中的文本。

2. TextArea(多行文本区域)

  • TextArea 是显示文本的多行区域,可以设置为允许编辑或只读。
    • 构造方法包括无参数、指定行列、指定初始化值和指定行列和初始化值。例如JTextArea()以默认的列数和行数,创建一个文本区对象;JTextArea(String s)以 s 为初始值,创建一个文本区对象;JTextArea(Strings,int x,int y)以 s 为初始值,行数为 x,列数为 y,创建一个文本区对象;JTextArea(int x,int y)以行数为 x,以列数为 y,创建一个文本区对象。
    • 当鼠标按键在组件上单击时,可以通过添加鼠标监听器来响应这个事件。此外,setText()可以设置显示文本,同时清除原有文本;getText()获取文本区的文本;insert(String s,int x)在指定的位置插入指定的文本;replace(String s,int x,int y)用给定的一替换从 x 位置开始到 y 位置结束的文本;append(String s)在文本区追加文本;getCarePosition()获取文本区中活动光标的位置;setCarePosition(int n)设置活动光标的位置;setLineWrap(boolean b)设置自动换行,缺省情况,不自动换行。当文本区中的内容较多,不能在文本区全部显示时,可给文本区配上滚动条,如JTextArea ta = new JTextArea();JScrollPane jsp = new JScrollPane(ta);。

六、示例演示

1. 建立简单窗体

在 Java 中,创建简单窗体可以通过以下步骤实现。首先,创建一个Frame窗体对象,如Frame f = new Frame("my frame");。然后,对窗体进行基本设置,包括大小、位置和布局等。例如,可以使用f.setSize(int wid,int hei)方法设置窗体大小,f.setLocation(int x,int y)方法调整窗体位置,f.setLayout(LayoutManager mgr)设置布局管理器,这里可以选择FlowLayout、BorderLayout等常见的布局管理器。接着,定义组件,如创建一个按钮Button b = new Button("my button");。最后,将组件通过窗体的add方法添加到窗体中,即f.add(b),并通过f.setVisible(true)让窗体显示出来。

简单窗体的事件监听可以通过添加监听器来实现。例如,要处理窗体事件,可以添加窗口监听器以监听窗口事件,可以通过addWindowListener(WindowListener l)方法添加一个窗口监听器。参数是一个WindowAdapter的子类对象,此处可以采用匿名内部类的形式。比如:f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}}),这样当窗体关闭事件发生时,程序会退出。

2. 在窗体中通过按钮关闭窗体

将图形化界面和事件分离,让按钮具备退出程序的功能可以通过以下方式实现。首先,创建一个按钮对象,如Button button = new Button("关闭");。然后,为按钮添加一个动作监听器,可以使用button.addActionListener(new ActionListener() {@Override public void actionPerformed(ActionEvent e) {System.exit(0);}})。这样,当用户点击按钮时,程序会退出。

选择监听器的方法需要根据具体的需求来确定。对于按钮的动作事件,可以选择ActionListener监听器。添加监听器可以用组件的addActionListener(ActionListener l)方法。在注册监听器时,可以接收xxxListener的子类对象或者xxxListener的子类xxxAdapter的子类对象。通常使用匿名内部类的形式来实现,这样可以方便地定义监听器的行为。覆盖方法时,参数一般是xxxEvent类型的变量接收。事件触发后会把事件打包成对象传递给变量,可通过getSource()或getComponent()获取事件源对象。

七、插件介绍

WindowBuilder 的安装和使用

WindowBuilder 是一个强大的插件,可用于在 Eclipse 中进行 Java GUI 编程。下面介绍其在线安装方法和使用步骤。

一、在线安装方法

  1. 在 Eclipse 中,依次点击 “Help”→“Eclipse Marketplace”。
  1. 在 “find” 中搜索 “windowBuilder”,点击 “install” 安装即可。不过需要注意的是,2014 年之前的 Eclipse 版本没有该功能。

二、使用步骤

  1. 在项目中使用插件创建 GUI 界面,首先需要在 Eclipse 中搜索并安装 WindowBuilder 插件。安装完成后,重启 Eclipse。
  1. 打开已有的项目或者创建一个新的项目。
  1. 在项目的包资源管理器中,右键点击项目名称,选择 “New”→“Other”。
  1. 在弹出的对话框中,找到 “WindowBuilder”→“Swing Designer”(如果要使用 SWT Designer 也可以,但 SWT Designer 兼容性没有 Swing Designer 好,Swing Designer 里面的控件都是 JXXXX 形式的,更适合 Java 使用)。
  1. 可以选择 “Application Window”,一般也就是应用窗口,点击 “Next”。类似于新建类,在后续对话框中输入 Name 和 Package。
  1. Finish 后,即可得到一个带有预先生成代码的空白窗体。点击代码窗口左下角新出现 “Design” 标签,可以使用 WindowBuilder Editor 可视化地查看窗体(也可以在生成的类文件上点击右键,选择 “Open With”→“WindowBuilder Editor”)。
  1. 在 WindowBuilder Editor 的界面中,可以使用绝对定位(点击 “Layouts” 下的 “Absolute layout”,再点击窗体),然后点击 “Components” 下的各种组件(如 “JTextField”、“JButton”、“JLabel” 等),再点击窗体进行添加,并可以修改其属性。
  1. 为组件添加事件监听,例如为按钮添加动作监听,可以在按钮上右键点击,选择添加监听的方式(如双击按钮,选择添加监听),然后在 “Source” 标签下的代码编辑器中会自动生成一些代码,可以在其中编写事件处理逻辑。

通过以上步骤,就可以使用 WindowBuilder 插件在 Eclipse 中轻松创建 GUI 界面。

八、总结

Java 的 GUI 编程提供了丰富的工具和组件,通过合理使用布局管理器、监听机制和各种组件,可以创建出功能强大、交互性强的图形用户界面应用程序。同时,插件的使用可以提高开发效率,让开发者更加专注于业务逻辑的实现。

在 Java 的 GUI 编程中,我们可以使用多种布局管理器来组织和排列组件,如 FlowLayout、BorderLayout、GridLayout、CardLayout 和 GridBagLayout 等。这些布局管理器各有特点,可以根据不同的需求进行选择。

监听机制是 Java GUI 编程中的重要组成部分,它由事件源、事件、监听器和事件处理组成。通过监听机制,我们可以对用户的操作进行响应,实现交互性强的图形用户界面应用程序。

在 Java 的 GUI 编程中,我们还可以使用各种组件来创建图形用户界面,如窗体(Frame)、按钮(Button)、TextField 和 TextArea 等。这些组件可以通过布局管理器进行组织和排列,实现美观、易用的图形用户界面应用程序。

此外,我们还可以使用插件来提高 Java GUI 编程的效率,如 WindowBuilder 和 JFormDesigner 等。这些插件可以提供可视化的界面设计工具,让开发者更加专注于业务逻辑的实现。

总之,Java 的 GUI 编程提供了丰富的工具和组件,通过合理使用布局管理器、监听机制和各种组件,可以创建出功能强大、交互性强的图形用户界面应用程序。同时,插件的使用可以提高开发效率,让开发者更加专注于业务逻辑的实现。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极兔速递开放平台快递物流查询API对接流程

目录 极兔速递开放平台快递物流查询API对接流程API简介物流查询API 对接流程1. 注册用户2. 申请成为开发者3. 企业认证4. 联调测试5. 发布上线 签名机制详解1. 提交方式2. 签名规则3. 字段类型与解析约定 物流轨迹服务极兔快递单号查询的其他方案总结 极兔速递开放平台快递物流…

【10】MySQL中的加密功能:如何使用MD5加密算法进行数据加密

文章目录 1. MySQL加密功能概述2. MD5加密算法3. 在MySQL中使用MD5加密4. 使用更安全的加密方法总结 在现代的数据库应用中,数据的安全性和隐私性变得尤为重要。无论是存储用户的个人信息,还是保护敏感的业务数据,确保这些数据不会被未授权访…

【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石

我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 一、引言 1. 栈与队列在编程中的角色定位 栈和队列作为两种基本的数据结构,在众多编程场景中都有着独特的地位。它们为数据的有序…

相交的链表

力扣链接:160. 相交链表 - 力扣(LeetCode) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据…

SpringBoot两天

SpringBoot讲义 什么是SpringBoot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式&#xf…

FilterListenerAjax

今日目标: 能够使用 Filter 完成登陆状态校验功能能够使用 axios 发送 ajax 请求熟悉 json 格式,并能使用 Fastjson 完成 java 对象和 json 串的相互转换使用 axios + json 完成综合案例1,Filter 1.1 Filter概述 Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、…

elasticsearch-如何给文档新增/更新的字段

文章目录 前言elasticsearch-如何给文档新增/更新的字段1. 如何给某些文档新增/更新的字段2. 给所有文档添加/更新一个新的字段3. 测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且…

详解Java数据库编程之JDBC

目录 首先创建一个Java项目 在Maven中央仓库下载mysql connector的jar包 针对MySQL版本5 针对MySQL版本8 下载之后,在IDEA中创建的项目中建立一个lib目录,然后把刚刚下载好的jar包拷贝进去,然后右键刚刚添加的jar包,点击‘添…

数据挖掘之数据预处理

​​​​​​​ 引言 数据挖掘是从大量数据中提取有用信息和知识的过程。在这个过程中,数据预处理是不可或缺的关键步骤。数据预处理旨在清理和转换数据,以提高数据质量,从而为后续的数据挖掘任务奠定坚实的基础。由于现实世界中的数据通常…

scala的正则表达式

定义一个规则,正则表达式 查找。 在目标字符串中,找到符合正则1表达式规则要求的 单个val reg"[^ab]".r 多个字符 1. . 表示 除了换行之外的其他任意单个字符 2. \d 等于【0-9】匹配一个数字 3. \D 除了\d之外的其他任意字符,表…

MySQL——操作

一.库的操作 1.基本操作 创建数据库 create database 数据库名称; 查看数据库 show databases; 删除数据库 drop database 数据库名称; 执行删除之后的结果: 数据库内部看不到对应的数据库 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删…

运费微服务和redis存热点数据

目录 运费模板微服务 接收前端发送的模板实体类 插入数据时使用的entity类对象 BaseEntity类 查询运费模板服务 新增和修改运费模块 整体流程 代码实现 运费计算 整体流程 总的代码 查找运费模板方法 计算重量方法 Redis存入热点数据 1.从nacos导入共享redis配置…

Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

前言 相信大家在刷算法题的过程中,好不容易想出来大概的思路,也知道去用哪个集合类,但各个集合类的一些命令都长得太像,很容易将他们弄错,并且在各集合之间的转化也是特别烦人,还有很多实用的函数都知道可…

【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)

CART(Classification and Regression Tree) CART(分类与回归树)是一种用于分类和回归任务的决策树算法,提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集,从而构建一棵树。CART …

《船舶物资与市场》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《船舶物资与市场》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《船舶物资与市场》级别? 答:国家级。主管单位:中国船舶集团有限公司 主办单…

「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器

本篇将带你实现一个多滑块联动的控制器应用。用户可以通过拖动多个滑块,动态控制不同参数(如红绿蓝三色值),并实时显示最终结果。我们将以动态颜色调节为例,展示如何结合状态管理和交互逻辑,打造一个高级的…

利用红黑树封装map,和set,实现主要功能

如果不知道红黑树是什么的时候可以去看看这个红黑树 思路 首先我们可以把封装分为两个层面理解,上层代码就是set,和map,底层就是红黑树 就相当于根据红黑树上面套了两个map,set的壳子,像下面这张图一样 对于map和set,map里面存…

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全

目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…

R语言机器学习论文(二):数据准备

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据一、数据描述二、数据预处理(一)修改元素名称(二)剔除无关变量(三)缺失值检查(四)重复值检查(五)异常值检查三、描述性统计(一)连续变量数据情…

java基础语法光速入门

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理Java的基础语法部分 适合有编程基础的人快点掌握语法使用 没学过一两门语言的话。。还是不建议看了 极致的浓缩没有一点解释 注释 单行注释 // 多行注释 /**/ 数据类型 布尔型:true false 整型:int,lon…