AWT常用组件

AWT中常用组件

  • 前言
  • 一、基本组件
    • 组件名
      • 标签(Label类)
        • Label类的构造方法
        • 注意要点
      • 按钮(Button)
        • Button的构造方法
        • 注意要点
      • 文本框(TextField)
        • TextField类的构造方法
        • 注意要点
      • 文本域(TextArea)
        • TextArea 的构造方法
        • 参数scrollbars的静态常量值
      • 复选框(Checkbox)
        • Checkbox类的构造方法
      • 单选按钮组的实现(结合使用CheckboxGroup类)
      • 下拉列表(Choice)
        • Choice类的常用成员方法
      • 列表(List)
        • List的常用成员方法
    • 代码示例
  • 二、对话框Dialog
    • 简介
    • 注意事项
    • 方法名称
    • 代码示例1
    • 代码示例2
  • 三、FileDialog
    • 简介
    • 方法名称
    • 代码示例


前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
https://www.captainbed.cn/f1

AWT中常用组件包括多种界面元素,用于构建图形用户界面。这些组件提供了丰富的交互功能,使得开发者能够创建出功能强大的应用程序。通过合理选择和组合这些组件,开发者能够设计出符合用户需求的界面,提升用户体验。


一、基本组件

组件名

组件名功能
ButtonButton
Canvas用于绘图的画布
Checkbox复选框组件(也可当做单选框组件使用)
CheckboxGroup用于将多个Checkbox 组件组合成一组, 一组 Checkbox 组件将只有一个可以 被选中 , 即全部变成单选框组件
Choice下拉选择框
Frame窗口 , 在 GUI 程序里通过该类创建窗口
Label标签类,用于放置提示性文本
ListJU表框组件,可以添加多项条目
Panel不能单独存在基本容器类,必须放到其他容器中
Scrollbar滑动条组件。如果需要用户输入位于某个范围的值 , 就可以使用滑动条组件 ,比如调 色板中设置 RGB 的三个值所用的滑动条。当创建一个滑动条时,必须指定它的方向、初始值、 滑块的大小、最小值和最大值。
ScrollPane带水平及垂直滚动条的容器组件
TextArea多行文本域
TextField单行文本框

这些 AWT 组件的用法比较简单,可以查阅 API 文档来获取它们各自的构方法、成员方法等详细信息。

标签(Label类)

标签是 GUI 程序中的常用组件,显示一行文本作为提示信息,起到说明的作用。通常,是不可编辑的;在AWT 的Label 类实例化标签对象时,可通过构造方法的参数赋值指定标签上文本的对齐方式。Label类的构造方法如表所示。

Label类的构造方法
构造方法描述
Label()实例化空标签对象
Label(String text)使用指定的文本字符串实例化标签对象,其文本对齐方式为左对齐
Label(String text, int alignment)实例化一个显示指定的文本字符串的新标签对象,其文本对齐方式为指定的方式

Label 对象不仅可在实例化时,指定文本对齐方式,还可在此后调用成员方法setAlignment(int alignment)进行设置。它们的参数 alignment是用于指定对齐方式的 int 型数据,在 Label 中为其定义了3个静态常量:Label.LEFT 表示左对齐(int 值 0), Label.CENTER 表示居中对齐(int值1),Label RIGHT 表示右对齐(int值 2)。

注意要点
  • setBackground(Color.red);设置背景颜色
  • setText("");修改标签
  • setAlignment(Label.CENTER);修改对齐方式

按钮(Button)

按钮是 GUI程序中的常用组件,用于触发特定动作,从而实现人机交互。通常,一个按钮对应着一种特定的操作,如确定、保存、取消等,从而用户可以用鼠标单击它来控制程序运行的流程。AWT的Button 类实例化按钮对象,该类的构造方法进行了两次重载。Button类的构造方法见表。

Button的构造方法
构造方法描述
Button()实例化一个标签字符串为空的按钮
Button(String label)实例化一个带指定标签的按钮。
注意要点
  • setLabel()设置文本标签
  • setActionCommand(String command)为激发事件设置名称
  • 程序中调用了 Button的成员方法 setLabel()setActionCommand(), 注意二者的区别:与它们互逆操作的成员方法是 getLabel()getActionCommand()

文本框(TextField)

文本框是 GUI 程序中的常用组件,用来显示或编辑一行文本。在 AWT 中,由类TextField 实例化文本框对象,该类继承自 TextComponent 类。TextField 类的构造方法有4种重载形式,通过给参数赋值,可以设置文本框中的初始文本字符,以及文本框的列数。TextField类的构造方法见表。

TextField类的构造方法
构造方法描述
TextField()实例化无内容的文本框对象
TextField(int columns)实例化文本框对象,指定列数
TextField(String text)实例化文本框对象,指定初始化文本
TextField(String text, int columns)实例化文本框对象,指定初始化文本、列数
注意要点

TexField 对象常用的成员方法与文本内容的设置与获取有关,分别是 setText()getText()。如果把文本框设计为密码框,则调用成员方法 setEchoChar()设置回显字符,成员方法 getEchoChar()获取回显字符。

文本域(TextArea)

文本域类 TextArea 与 TextField 一样,都是文本编辑组件,同属 TextComponent的子类,只是文本域可以显示多行多列的文本。TextArea类的构造方法有5 种重载形式,通过参数赋值,不但可以像 TextField 一样指定初始化文本内容、列数,而且可以指定文本域的行数、垂直滚动条的显示。TextArea 的构造方法见表。

TextArea 的构造方法
构造方法描述
TextArea()实例化无内容的文本域对象
TextArea(int rows, int columns)实例化文本域对象,指定行数和列数
TextArea(String text)实例化具有指定文本的文本域对象
TextArea(String text, int rows, int columns)实例化文本域对象,指定初始文本内容、数和列数
TextArea(String text, int rows, int columns, intscrollbars)实例化文本域对象,指定文本、行数、列数和滚动条可见性

在类 TextArea 中为参数 scrollbars定义了相应的静态常量。文本域中的文本并不能自动换行,可以通过为参数 scrollbars 赋值TextArea.SCROLLBARS_VERTICAL_ONLY 来实现。

参数 scrollbars 的静态常量值见表。

参数scrollbars的静态常量值
构造方法描述
SCROLLBARS_BOTH显示垂直和水平滚动条
SCROLLBARS_HORIZONTAL_ONLY显示水平滚动条
SCROLLBARS_NONE不显示滚动条
SCROLLBARS_VERTICAL_ONLY显示垂直滚动条

除了与TextField相似的常用成员方法,类TextArea还经常用到成员方法append(String str),将给定文本追加到文本区的当前文本;setEditable()设置是否可以编辑。

复选框(Checkbox)

复选框是一种输入信息的组件,拥有“状态”的特性,通过鼠标单击复选框的操作可以将其状态从“true”更改为“false”,或从“false” 更改为“true”。通过布局设置,多个复选框组件可形成一组,实现多项选择。

AWT 的 Checkbox类实例化复选框对象,构造方法有5种重载形式。通过给 Checkbox 类构造方法的参数赋值,可以设置复选框的文本标签内容,以及复选框的状态值。Checkbox类的构造方法见表。

Checkbox类的构造方法
构造方法描述
Checkbox()创建复选框,未指定标签内容
Checkbox(String label)创建复选框,指定标签内容
Checkbox(String label, boolean state)创建复选框,即指定标签,也指定状态
Checkbox(String label, boolean state,CheckboxGroup group)创建Checkbox 对象,指定标签,指定状态,指定复选框组
Checkbox(String label, CheckboxGroup group,boolean state)创建 Checkbox对象,指定标签,指定复选框组,指定状态

Checkbox 对象常用的成员方法与其状态有关,setState(boolean state)设置状态值,getState()获取状态值。

单选按钮组的实现(结合使用CheckboxGroup类)

单选按钮是一种输入信息的组件,拥有“状态”的特性,通过鼠标单击单选按钮的操作可以将其状态从“true” 更改为“false”,或从“false”更改为“true”。作为同一组的多个单选按钮组件是互斥的,即每一时刻只能有一个组件的状态为“true”,从而实现单项选择。

在AWT中,单选按钮对象的创建也是通过 Checkbox类实例化的。参数 group 是类 CheckboxGroup 的对象,同一组的单选按钮,必须保证 group 参数相同。

import java.awt.*;
import java.awt.event.ActionEvent;

public class test extends Frame {
    Panel panel = new Panel();
    CheckboxGroup group = new CheckboxGroup();
    Checkbox checkbox1 = new Checkbox("boy",group,true);
    Checkbox checkbox2 = new Checkbox("girl",group,false);
     public  test(String s)
     {
         super(s);
         panel.add(checkbox1);
         panel.add(checkbox2);
         add(panel);
         pack();
         setVisible(true);
     }

    public  static void main(String[] args)
    {
        new test("test");
    }
}

下拉列表(Choice)

下拉列表是一种输入信息的组件,带有一系列选项,每次可以从中选择一项作为输入,即支持单选。下拉列表将所有的选项进行隐藏,当选用其中的选项时才会显示出来,这样能够节省显示空间,适用于待选择选项较多的情况。

AWT中的类 Choice 实例化得到下拉列表组件,它的构造方法 Choice()创建一个没有任何选项的空白下拉菜单。此后,调用成员方法 add(Sring item)添加选项 item;默认情况下,添加的第一个项将成为选定项。类 Choice的常用成员方法与选项的增、删、选等有关。Choice 类的常用成员方法见表。

Choice类的常用成员方法
成员方法描述
void add(String item)将一个选项添加到 Choice 下拉列表中
String getltem(int index)获取 Choice 下拉列表中指定索引上的字符串
int getltemCount()返回 Choice下拉列表中项的数量
int getSelectedIndex()返回当前选定项的索引
String getSelectedItem()获取当前选择项的内容
void remove(int index)删除指定位置的选项
void removeAll()移除 Choice 下拉列表中所有项
void select(int index)选择指定索引的选项
void select(String str)选择指定字符串的选项

列表(List)

列表是一种输入信息的组件,提供了一个可滚动的选项列表;通过设置,每次可以从中选择单项或多项作为输入。列表将所有选项罗列和显示在列表框中,比下拉列表更加直观。

AWT的List 类实例化列表组件,提供多个文本选项,支持滚动条。它的构造方法有3种重载形式,通过参数赋值可以指定列表项数目,以及是否允许进行多项选择。无论哪种形式的构造方法,创建的都是空白列表。此后,调用成员方法add()添加选项。下面的语句演示了List 创建列表:

List Ist = new List(4, false);
Ist.add("Mercury");
Ist.add("Venus");
Ist.add("Earth");
Ist.add("JavaSoft");

类List的常用成员方法(见表) 与选项的增、删、选等有关。

List的常用成员方法
成员方法描述
String getSelectedItem(int )返回选中的字符串
int countItems()返回列表条目数
int getSelectedIndex ()返回当前选项的索引
String getltem(int)返回指定索引处的字符串
void removeAll()删除所有选项
void remove(int)删除指定位置的选项
void addItem(String , int)在指定位置加入一个选项
void addltem (String)向列表末尾加入一个选项
void select(String)选择指定字符串的选项

代码示例

实现下图效果
在这里插入图片描述

import java.awt.*;

public class test {
    Frame frame = new Frame("test");

    //定义一个按钮
    Button ok = new Button("right");

    //定义一个复选框组
    CheckboxGroup cbg = new CheckboxGroup();
    //定义一个单选框,初始处于被选中状态,并添加到cbg组中
    Checkbox male = new Checkbox("man", cbg, true);

    //定义一个单选框,初始处于未被选中状态,并添加到cbg组中
    Checkbox female = new Checkbox("girl", cbg, false);

    //定义一个复选框,初始处于未被选中状态
    Checkbox married = new Checkbox("married?", false);

    //定义一个下拉选择框
    Choice colorChooser = new Choice();

    //定义一个列表选择框
    List colorList = new List(6, true);

    //定义一个5行,20列的多行文本域
    TextArea ta = new TextArea(5, 20);

    //定义一个50列的单行文本域
    TextField tf = new TextField(50);

    public void init() {
        //往下拉选择框中添加内容
        colorChooser.add("red");
        colorChooser.add("gree");
        colorChooser.add("blue");

        //往列表选择框中添加内容
        colorList.add("red");
        colorList.add("gree");
        colorList.add("blue");

        //创建一个装载按钮和文本框的Panel容器
        Panel bottom = new Panel();
        bottom.add(tf);
        bottom.add(ok);

        //把bottom添加到Frame的底部
        frame.add(bottom,BorderLayout.SOUTH);

        //创建一个Panel容器,装载下拉选择框,单选框和复选框
        Panel checkPanel = new Panel();
        checkPanel.add(colorChooser);
        checkPanel.add(male);
        checkPanel.add(female);
        checkPanel.add(married);

        //创建一个垂直排列的Box容器,装载 多行文本域和checkPanel
        Box topLeft = Box.createVerticalBox();
        topLeft.add(ta);
        topLeft.add(checkPanel);

        //创建一个水平排列的Box容器,装载topLeft和列表选择框
        Box top = Box.createHorizontalBox();
        top.add(topLeft);
        top.add(colorList);

        //将top添加到frame的中间区域
        frame.add(top);


        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {

        new test().init();

    }
}

二、对话框Dialog

简介

Dialog 是 Window 类的子类,是 一个容器类,属于特殊组件 。 对话框是可以独立存在的顶级窗口, 因此用法与普通窗口的用法几乎完全一样,但是使用对话框需要注意下面两点:

注意事项

  • 对话框通常依赖于其他窗口,就是通常需要有一个父窗口;
  • 对话框有非模式(non-modal)和模式(modal)两种,当某个模式对话框被打开后,该模式对话框总是位于它的父窗口之上,在模式对话框被关闭之前,父窗口无法获得焦点。

方法名称

方法名称方法功能
Dialog(Frame owner, String title, boolean modal)创建一个对话框对象:
owner:当前对话框的父窗口
title:当前对话框的标题
modal:当前对话框是否是模式对话框,true/false

代码示例1

通过Frame、Button、Dialog实现下图效果:
在这里插入图片描述

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

public class test {

    public static void main(String[] args) {

        Frame frame = new Frame("test:Dialog");

        Dialog d1 = new Dialog(frame, "modal", true);
        Dialog d2 = new Dialog(frame, "no modal", false);

        Button b1 = new Button("modal");
        Button b2 = new Button("no modal");

        //设置对话框的大小和位置
        d1.setBounds(20,30,300,400);
        d2.setBounds(20,30,300,400);

        //给b1和b2绑定监听事件
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d1.setVisible(true);
            }
        });
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d2.setVisible(true);
            }
        });

        //把按钮添加到frame中
        frame.add(b1);
        frame.add(b2,BorderLayout.SOUTH);

        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);
    }
}

该程序使用Java的AWT(Abstract Window Toolkit)库创建了一个窗口和两个对话框。程序的主要部分在main方法中。

首先,创建了一个Frame对象,表示窗口,并设置了窗口的标题为"test:Dialog"。

然后,创建了两个Dialog对象,表示对话框。第一个对话框是模态对话框(modal),第二个对话框是非模态对话框(no modal)。模态对话框会阻塞其他窗口的操作,直到对话框被关闭,而非模态对话框不会阻塞其他窗口的操作。

接下来,创建了两个Button对象,分别用来触发显示对话框的操作。第一个按钮是"modal",点击后会显示第一个对话框,第二个按钮是"no modal",点击后会显示第二个对话框。

然后,设置了两个对话框的大小和位置。

接着,给两个按钮绑定了监听器,当按钮被点击时,对应的对话框会显示出来。在监听器的实现中,调用对话框的setVisible(true)方法显示对话框。

最后,将两个按钮添加到窗口的布局中,并设置窗口的最佳大小并可见。

这样,运行程序后,会显示一个窗口和两个按钮,点击按钮会显示对应的对话框。

在Dialog对话框中,可以根据需求,自定义内容

代码示例2

点击按钮,弹出一个模式对话框,其内容如下
在这里插入图片描述

public class DialogDemo2 {

    public static void main(String[] args) {

        Frame frame = new Frame("这里测试Dialog");

        Dialog d1 = new Dialog(frame, "模式对话框", true);

        //往对话框中添加内容
        Box vBox = Box.createVerticalBox();

        vBox.add(new TextField(15));
        vBox.add(new JButton("确认"));
        d1.add(vBox);

        Button b1 = new Button("打开模式对话框");

        //设置对话框的大小和位置
        d1.setBounds(20,30,200,100);


        //给b1绑定监听事件
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d1.setVisible(true);
            }
        });


        //把按钮添加到frame中
        frame.add(b1);

        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);

    }
}

三、FileDialog

简介

Dialog 类还有 一个子类 : FileDialog ,它代表一个文件对话框,用于打开或者保存 文件,需要注意的是FileDialog无法指定模态或者非模态,这是因为 FileDialog 依赖于运行平台的实现,如果运行平台的文件对话框是模态的,那么 FileDialog 也是模态的;否则就是非模态的 。

方法名称

方法名称方法功能
FileDialog(Frame parent, String title, int mode)创建一个文件对话框:
parent:指定父窗口
title:对话框标题
mode:文件对话框类型,如果指定为FileDialog.load,用于打开文件,如果指定为FileDialog.SAVE,用于保存文件
String getDirectory()获取被打开或保存文件的绝对路径
String getFile()获取被打开或保存文件的文件名

代码示例

使用 Frame、Button和FileDialog完成下图效果:
在这里插入图片描述

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

public class FileDialogTest {

    public static void main(String[] args) {

        Frame frame = new Frame("这里测试FileDialog");

        FileDialog d1 = new FileDialog(frame, "选择需要加载的文件", FileDialog.LOAD);
        FileDialog d2 = new FileDialog(frame, "选择需要保存的文件", FileDialog.SAVE);

        Button b1 = new Button("打开文件");
        Button b2 = new Button("保存文件");

        //给按钮添加事件
        b1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d1.setVisible(true);
                //打印用户选择的文件路径和名称
                System.out.println("用户选择的文件路径:"+d1.getDirectory());
                System.out.println("用户选择的文件名称:"+d1.getFile());
            }
        });

        System.out.println("-------------------------------");
        b2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d2.setVisible(true);
                //打印用户选择的文件路径和名称
                System.out.println("用户选择的文件路径:"+d2.getDirectory());
                System.out.println("用户选择的文件名称:"+d2.getFile());
            }
        });

        //添加按钮到frame中

        frame.add(b1);
        frame.add(b2,BorderLayout.SOUTH);

        //设置frame最佳大小并可见
        frame.pack();
        frame.setVisible(true);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java_Map集合

认识Map集合 Map集合称为双列集合,格式:{key1value,key2value2,key3value3,…},一次需要存一对数据作为一个元素。 Map集合的每个元素“Keyvalue” 称为一个键值对/键值对对象/一个Entry对象,Map集合也被叫做“键值对集合” Map集…

攻防演练之-网络集结号

每一次的网络安全攻防演练都是各个安全厂商期待的网络安全盛会,因为目前的安全生态导致了只有在网络安全攻防演练期间,网络安全的价值才会走向台前,收到相关方的重视。虽然每一次都会由于各种原因不能如期举行,但是这一次的推迟总…

Anaconda配置环境

查看存在的环境 conda list创建环境 #创建 名称为python38的python环境 conda create -n python38 python3.8 #激活 conda activate python38 #退出当前环境 conda deactivate安装python包 #安装numpy包 conda install numpy #安装指定版本 conda install numpy1.0.2 #安装指…

内存卡执行格式化数据还能恢复吗?

众所周知,内存卡对各类电子产品的正常使用至关重要。但在日常使用过程中,错误操作可能导致珍贵资料丢失或意外格式化。相较于其它的删除方式,执行格式化导致的相关问题,想要去恢复的话难度是很高的。那么,内存卡执行格…

Java数组的定义 ,基本概念与使用

数组的定义 1.问题:想将一个数据保存起来,我们可以使用变量,但是变量一次只能存储一个数据,所以我们想能不能一次存多个数据2.数组概述:是一个容器,数组本身属于引用数据类型3.作用:一次存储多个数据4.特点:a.既可以存储基本类型的数据,还能存储引用类型的数据b.定长(定义数组…

wx小程序自定义tabbar

1.在app.json文件中,添加自定义tabbar配置:"custom": true "tabBar": {"custom": true,"backgroundColor": "#fafafa","borderStyle": "white","selectedColor": &quo…

k8s——pod控制器

一、pod控制器定义 Pod控制器,又称之为工作负载(workload),是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试进行重启,当根据重启策略无效&#xf…

字符串常量简单介绍

C/C内存四区介绍 如前文所示,字符串常量存储在静态存储区的字符串常量区,这样做的好处是 当程序使用到多个相同的字符串常量时,实际上都是使用的同一份,这样就可以减小程序的体积。注意字符串常量是只读的不能被修改。 如图所示&…

Simscape Multibody与RigidBodyTree:机器人建模

RigidBodyTree:主要用于表示机器人刚体结构的动力学模型,重点关注机器人的几何结构、质量和力矩,以及它们如何随时间变化。它通常用于计算机器人的运动和受力情况。Simscape Multibody:作为Simscape的一个子模块,专门用…

网络学习(二)DNS域名解析原理、DNS记录

目录 一、为什么要使用DNS?二、因特网的域名结构三、DNS域名解析原理【含详细图解】四、DNS记录(A记录、AAAA记录、CNAME记录等) 一、为什么要使用DNS? 我们知道,TCP/IP 协议中是使用 IP 地址和端口号来确定网络上的某…

React中的 Scheduler

为什么需要调度 在 React 中,组件最终体现为 Fiber,并形成 FiberTree,Fiber 的目的是提高渲染性能,将原先的 React 渲染任务拆分为多个小的微任务,这样做的目的是可以灵活的让出主线程,可以随时打断渲染&a…

Ffmpeg安装和简单使用

Ffmpeg安装 下载并解压 进入官网 (https://ffmpeg.org/download.html),选择 Window 然后再打开的页面中下滑找到 release builds,点击 zip 文件下载 环境变量配置 下载好之后解压,找到 bin 文件夹,里面有3个 .exe 文件 然后复制…

高德地图简单实现点标,和区域绘制

高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart 百度搜索高德地图开发平台 注册高德地图开发账号 在应用管理中 我的应用中 添加一个Key 点击提交 进入高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart …

CTE-6作文

第一段 现象 引出原因 第二段 感受 举例 意义 危害 第三段 建议 展望

使用MFC DLL

本文仅供学习交流,严禁用于商业用途,如本文涉及侵权请及时联系本人将于及时删除 应用程序与DLL链接后,DLL才能通过应用程序调用运行。应用程序与DLL链接的方式主要有如下两种:隐式链接和显式链接。 隐式链接又称为静态加载&…

【python】python化妆品销售logistic逻辑回归预测分析可视化(源码+课程论文+数据集)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

Apache Pulsar 从入门到精通

一、快速入门 Pulsar 是一个分布式发布-订阅消息平台,具有非常灵活的消息模型和直观的客户端 API。 最初由 Yahoo 开发,在 2016 年开源,并于2018年9月毕业成为 Apache 基金会的顶级项目。Pulsar 已经在 Yahoo 的生产环境使用了三年多&#…

AI服务器相关知识

在当今社会,人工智能的应用场景愈发广泛,如小爱同学、天猫精灵等 AI 服务已深入人们的生活。随着人工智能时代的来临,AI 服务器也开始在社会各行业发挥重要作用。那么,AI 服务器与传统服务器相比,究竟有何独特之处&…

速度位置规划实现精确定位的问题

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

npm install 的原理

1. 执行命令发生了什么 ? 执行命令后,会将安装相关的依赖,依赖会存放在根目录的node_modules下,默认采用扁平化的方式安装,排序规则为:bin文件夹为第一个,然后是开头系列的文件夹,后…