JavaGUI之SWT框架【阶段练习】

文章目录

  • 效果展示
  • 选项卡界面创建
  • 划分右侧区域
  • 填充右侧上方Composite
  • 填充右侧下方Composite
  • 填充左侧Composite
  • 完整代码

SWT基础部分的内容以全部写完,现在让我们将以前学到的知识综合到一起,写一个小demo(无交互功能)

效果展示

在这里插入图片描述

选项卡界面创建

观察不难发现,整个GUI界面的基石部分是由TabFolder组成,所以我们先将该组件创建出来,后续界面将在此基础上划分编后写

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.*;

public class Demo {
    private static Composite tabComposite;
    private static SashForm externalSashForm;
    private static SashForm internalSashForm;

    private static Composite rightUpComposite;
    private static Composite rightDownComposite;

    private static Group group;
    private static Composite leftComposite;

    private static GridLayout commonGridLayout;

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        shell.setSize(1000, 600);

        TabFolder tabFolder = new TabFolder(shell, SWT.NONE);
        TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
        tabItem.setText("选项卡1");
        tabItem.setControl(createTabPage(tabFolder));

        shell.open();
        while (!shell.isDisposed()) {
            while (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        shell.dispose();
    }

    /**
     * 创建选项卡控制Control
     * @param tabFolder
     * @return
     */
    private static Control createTabPage(TabFolder tabFolder) {
        tabComposite = new Composite(tabFolder, SWT.NONE);
        // 设置布局
        tabComposite.setLayout(new FillLayout());
        // 创建三列面板
        externalSashForm = new SashForm(tabComposite, SWT.NONE);
        externalSashForm.setLayout(new FillLayout());

        createLeftBody();
        new Composite(externalSashForm, SWT.NONE);
        createRightBody();
        
        externalSashForm.setWeights(new int[]{10, 1, 8});
        return tabComposite;
    }

    private static void createRightBody() {
        // 占位
        new Composite(externalSashForm, SWT.BORDER);
    }

    private static void createLeftBody() {
        // 占位
        new Composite(externalSashForm, SWT.BORDER);
    }
}

阶段性效果

在这里插入图片描述

这段程序中,我们创建了一个TabFolder选项卡,并创建由tabItem控制的界面。有关TabFolder的部分本文不在赘述,详见JavaGUI之SWT框架【面板容器类 选项卡TabFolder】
,我们主要讲解createTabPage函数。

通过对最终界面的观察,我们不难发现面板需要通过SashForm进行界面划分,问题是如何划分。我们不难发现整体呈现左右结构,我们可以将界面划分为两列,可两列中间如何出现留白呢?我们并没有学习过相关的api能够实现留白,划分两列的方式是无法复原我们想要的效果。实际上,我们可以将其划分为散列,通过控制面板宽度比例营造出留白的效果。这也就是createPage()中下面三段代码的含义

createLeftBody();
new Composite(externalSashForm, SWT.NONE);
createRightBody();

externalSashForm.setWeights(new int[]{5, 1, 4});

首先创建左侧身体部分,然后创建中间的缓冲区,最后创建右侧身体部分,最终设置三部分的宽度比例。

在这里插入图片描述

划分右侧区域

右侧区域我们依然可以使用SashForm进行划分,划分为上下结构

    private static void createRightBody() {
        // 创建两行
        internalSashForm = new SashForm(externalSashForm, SWT.VERTICAL);
        internalSashForm.setLayout(new FillLayout());

        // 创建右侧上方容器
        rightUpComposite = new Composite(internalSashForm, SWT.BORDER);
        GridLayout gridLayout = new GridLayout(4, true);
        rightUpComposite.setLayout(gridLayout);
        setRightUpComp();

        // 创建右侧下方容器
        rightDownComposite = new Composite(internalSashForm, SWT.BORDER);
        rightDownComposite.setLayout(new FillLayout());
        setRightDownComp();

        internalSashForm.setWeights(new int[]{2, 3});
    }

    /**
     * 设置rightUpComposite;
     */
    private static void setRightUpComp() {
    	// 占位
    	new Composite(internalSashForm, SWT.BORDER);
    }

    /**
     * 设置rightDownComposite
     */
    private static void setRightDownComp() {
        // 占位
    	new Composite(internalSashForm, SWT.BORDER);
    }

在这里插入图片描述

填充右侧上方Composite

右侧上方的Composite,其内部组件都没有特别需要注意的点。唯一需要强调的是GridDatarightUpComposite组件设置的布局方式是GridLayout,划分的时候我们创建了4列,并且每列的宽度一致。我们在rightUpComposite上添加组件时,可以用GridData控制组件横跨单元格数量等更为细粒度的布局格式,GridData详细的说明请见JavaGUI之SWT框架【GridLayout】。

/**
 * 设置rightUpComposite;
 */
private static void setRightUpComp() {
    Label label1 = new Label(rightUpComposite, SWT.NONE);
    label1.setText("第一行");
    Combo combo1 = new Combo(rightUpComposite, SWT.BORDER);
    combo1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
    combo1.setItems(new String[]{"选项一", "选项二", "选项三"});


    Label label2 = new Label(rightUpComposite, SWT.NONE);
    label2.setText("第二行");
    List list2 = new List(rightUpComposite, SWT.BORDER);
    list2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
    list2.setItems(new String[]{"列表一"});
    new Text(rightUpComposite, SWT.BORDER | SWT.READ_ONLY);

    Label label3 = new Label(rightUpComposite, SWT.NONE);
    label3.setText("第三行");
    for (int i = 0; i < 3; i++) {
        new Button(rightUpComposite, SWT.CHECK).setText("按钮" + i);
    }

    Label label4 = new Label(rightUpComposite, SWT.NONE);
    label4.setText("第四行");
    Text text4 = new Text(rightUpComposite, SWT.BORDER | SWT.READ_ONLY);
    text4.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
    text4.setText("这是SWT框架的阶段练习");
}

效果
在这里插入图片描述

我们可以设置GridLayout,控制划分单元格的水平间距和垂直间距,让组件分布更加均匀
gridLayout.horizontalSpacing = 10; gridLayout.verticalSpacing = 20;
在这里插入图片描述

填充右侧下方Composite

偷懒了,放个button意思意思

    /**
     * 设置rightDownComposite
     */
    private static void setRightDownComp() {
        new Button(rightDownComposite, SWT.PUSH).setText("放个button意思意思");
    }

这时候可能会有人感到疑惑,为什么button会填充满整个右下侧控件,想要解答这个疑惑,需要FillLayout相关的知识。有关这部分的内容详见JavaGUI框架之SWT【布局FillLayout】

在这里插入图片描述

填充左侧Composite

代码量偏大,但逻辑是一致的。下方代码给出了详细的注释,读者可自行查看。

    private static void createLeftBody() {
        group = new Group(externalSashForm, SWT.BORDER);
        group.setLayout(new FillLayout());
        group.setText("左侧模块");

        leftComposite = new Composite(group, SWT.NONE);
        leftComposite .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        // 初始化通用网格布局
        commonGridLayout = new GridLayout();
        commonGridLayout.numColumns = 3;
        commonGridLayout.makeColumnsEqualWidth = true;
        commonGridLayout.horizontalSpacing = 40;
        commonGridLayout.verticalSpacing = 20;

        leftComposite .setLayout(commonGridLayout);

        setLeftComp();

    }

    private static void setLeftComp() {
        // 启用触发条件按钮
        Button triggerSwitchButton = new Button(leftComposite , SWT.CHECK);
        triggerSwitchButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1));
        triggerSwitchButton.setText("启动条件");

        /*-----------------------------------开始板块-------------------------------------*/
        Composite startComp = new Composite(leftComposite , SWT.NONE);
        startComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
        startComp.setLayout(commonGridLayout);

        // 文本
        Text text1 = new Text(startComp, SWT.READ_ONLY | SWT.BORDER);
        text1.setText("swt阶段练习 启动触发条件");
        text1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));

        // 开始-按键触发
        Button startButton1 = new Button(startComp, SWT.RADIO);
        startButton1.setText("按键开始");
        Text startText1 = new Text(startComp, SWT.BORDER);
        startText1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        startText1.setText("快捷键");
        // 占位
        new Text(startComp, SWT.NONE);

        // 开始-信号触发
        Button startButton2 = new Button(startComp, SWT.RADIO);
        startButton2.setText("信号开始");
        Text startText2 = new Text(startComp, SWT.BORDER);
        startText2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        // 初始化editButton
        Button startEditButton1 = new Button(startComp, SWT.PUSH);
        startEditButton1.setText("编辑按钮");
        startEditButton1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        // 开始-变量触发
        Button startButton3 = new Button(startComp, SWT.RADIO);
        startButton3.setText("变量开始");
        Text startText3 = new Text(startComp, SWT.BORDER);
        startText3.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        Button startEditButton2 = new Button(startComp, SWT.PUSH);
        startEditButton2.setText("编辑按钮");
        startEditButton2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        /*-----------------------------------停止板块-------------------------------------*/
        Composite endComp = new Composite(leftComposite , SWT.NONE);
        endComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
        endComp.setLayout(commonGridLayout);

        // 文本2
        Text text2 = new Text(endComp, SWT.READ_ONLY | SWT.BORDER);
        text2.setText("swt阶段练习 停止触发条件");
        text2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));

        // 结束-按键触发
        Button endButton1 = new Button(endComp, SWT.RADIO);
        endButton1.setText("按键停止");
        Text endText1 = new Text(endComp, SWT.BORDER);
        endText1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        endText1.setText("快捷键");
        // 占位
        new Text(endComp, SWT.NONE);

        // 结束-信号触发
        Button endButton2 = new Button(endComp, SWT.RADIO);
        endButton2.setText("信号停止");
        Text endText2 = new Text(endComp, SWT.BORDER);
        endText2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        Button endEditButton1 = new Button(endComp, SWT.PUSH);
        endEditButton1.setText("编辑按钮");
        endEditButton1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        // 结束-变量触发
        Button endButton3 = new Button(endComp, SWT.RADIO);
        endButton3.setText("变量停止");
        Text endText3 = new Text(endComp, SWT.BORDER);
        endText3.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        Button endEditButton2 = new Button(endComp, SWT.PUSH);
        endEditButton2.setText("编辑按钮");
        endEditButton2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    }

效果
在这里插入图片描述

完整代码

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;

public class Demo {
    private static Composite tabComposite;
    private static SashForm externalSashForm;
    private static SashForm internalSashForm;

    private static Composite rightUpComposite;
    private static Composite rightDownComposite;

    private static Group group;
    private static Composite leftComposite;

    private static GridLayout commonGridLayout;

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        shell.setSize(1000, 600);

        TabFolder tabFolder = new TabFolder(shell, SWT.NONE);
        TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
        tabItem.setText("选项卡1");
        tabItem.setControl(createTabPage(tabFolder));

        shell.open();
        while (!shell.isDisposed()) {
            while (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        shell.dispose();
    }

    /**
     * 创建选项卡控制Control
     * @param tabFolder
     * @return
     */
    private static Control createTabPage(TabFolder tabFolder) {
        tabComposite = new Composite(tabFolder, SWT.NONE);
        // 设置布局
        tabComposite.setLayout(new FillLayout());
        // 创建三列面板
        externalSashForm = new SashForm(tabComposite, SWT.NONE);
        externalSashForm.setLayout(new FillLayout());

        createLeftBody();
        new Composite(externalSashForm, SWT.NONE);
        createRightBody();
        
        externalSashForm.setWeights(new int[]{10, 1, 8});
        return tabComposite;
    }

    private static void createRightBody() {
        // 创建两行
        internalSashForm = new SashForm(externalSashForm, SWT.VERTICAL);
        internalSashForm.setLayout(new FillLayout());

        // 创建右侧上方容器
        rightUpComposite = new Composite(internalSashForm, SWT.BORDER);
        GridLayout gridLayout = new GridLayout(4, true);
        gridLayout.horizontalSpacing = 10;
        gridLayout.verticalSpacing = 20;
        rightUpComposite.setLayout(gridLayout);
        setRightUpComp();

        // 创建右侧下方容器
        rightDownComposite = new Composite(internalSashForm, SWT.BORDER);
        rightDownComposite.setLayout(new FillLayout());
        setRightDownComp();

        internalSashForm.setWeights(new int[]{2, 3});
    }

    /**
     * 设置rightUpComposite;
     */
    private static void setRightUpComp() {
        Label label1 = new Label(rightUpComposite, SWT.NONE);
        label1.setText("第一行");
        Combo combo1 = new Combo(rightUpComposite, SWT.BORDER);
        combo1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
        combo1.setItems(new String[]{"选项一", "选项二", "选项三"});


        Label label2 = new Label(rightUpComposite, SWT.NONE);
        label2.setText("第二行");
        List list2 = new List(rightUpComposite, SWT.BORDER);
        list2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
        list2.setItems(new String[]{"列表一"});
        new Text(rightUpComposite, SWT.BORDER | SWT.READ_ONLY);

        Label label3 = new Label(rightUpComposite, SWT.NONE);
        label3.setText("第三行");
        for (int i = 0; i < 3; i++) {
            new Button(rightUpComposite, SWT.CHECK).setText("按钮" + i);
        }

        Label label4 = new Label(rightUpComposite, SWT.NONE);
        label4.setText("第四行");
        Text text4 = new Text(rightUpComposite, SWT.BORDER | SWT.READ_ONLY);
        text4.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
        text4.setText("这是SWT框架的阶段练习");
    }

    /**
     * 设置rightDownComposite
     */
    private static void setRightDownComp() {
        new Button(rightDownComposite, SWT.PUSH).setText("放个button意思意思");
    }

    private static void createLeftBody() {
        group = new Group(externalSashForm, SWT.BORDER);
        group.setLayout(new FillLayout());
        group.setText("左侧模块");

        leftComposite = new Composite(group, SWT.NONE);
        leftComposite .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        // 初始化通用网格布局
        commonGridLayout = new GridLayout();
        commonGridLayout.numColumns = 3;
        commonGridLayout.makeColumnsEqualWidth = true;
        commonGridLayout.horizontalSpacing = 40;
        commonGridLayout.verticalSpacing = 20;

        leftComposite .setLayout(commonGridLayout);

        setLeftComp();

    }

    private static void setLeftComp() {
        // 启用触发条件按钮
        Button triggerSwitchButton = new Button(leftComposite , SWT.CHECK);
        triggerSwitchButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1));
        triggerSwitchButton.setText("启动条件");

        /*-----------------------------------开始板块-------------------------------------*/
        Composite startComp = new Composite(leftComposite , SWT.NONE);
        startComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
        startComp.setLayout(commonGridLayout);

        // 文本
        Text text1 = new Text(startComp, SWT.READ_ONLY | SWT.BORDER);
        text1.setText("swt阶段练习 启动触发条件");
        text1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));

        // 开始-按键触发
        Button startButton1 = new Button(startComp, SWT.RADIO);
        startButton1.setText("按键开始");
        Text startText1 = new Text(startComp, SWT.BORDER);
        startText1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        startText1.setText("快捷键");
        // 占位
        new Text(startComp, SWT.NONE);

        // 开始-信号触发
        Button startButton2 = new Button(startComp, SWT.RADIO);
        startButton2.setText("信号开始");
        Text startText2 = new Text(startComp, SWT.BORDER);
        startText2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        // 初始化editButton
        Button startEditButton1 = new Button(startComp, SWT.PUSH);
        startEditButton1.setText("编辑按钮");
        startEditButton1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        // 开始-变量触发
        Button startButton3 = new Button(startComp, SWT.RADIO);
        startButton3.setText("变量开始");
        Text startText3 = new Text(startComp, SWT.BORDER);
        startText3.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        Button startEditButton2 = new Button(startComp, SWT.PUSH);
        startEditButton2.setText("编辑按钮");
        startEditButton2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        /*-----------------------------------停止板块-------------------------------------*/
        Composite endComp = new Composite(leftComposite , SWT.NONE);
        endComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));
        endComp.setLayout(commonGridLayout);

        // 文本2
        Text text2 = new Text(endComp, SWT.READ_ONLY | SWT.BORDER);
        text2.setText("swt阶段练习 停止触发条件");
        text2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1));

        // 结束-按键触发
        Button endButton1 = new Button(endComp, SWT.RADIO);
        endButton1.setText("按键停止");
        Text endText1 = new Text(endComp, SWT.BORDER);
        endText1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        endText1.setText("快捷键");
        // 占位
        new Text(endComp, SWT.NONE);

        // 结束-信号触发
        Button endButton2 = new Button(endComp, SWT.RADIO);
        endButton2.setText("信号停止");
        Text endText2 = new Text(endComp, SWT.BORDER);
        endText2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        Button endEditButton1 = new Button(endComp, SWT.PUSH);
        endEditButton1.setText("编辑按钮");
        endEditButton1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));

        // 结束-变量触发
        Button endButton3 = new Button(endComp, SWT.RADIO);
        endButton3.setText("变量停止");
        Text endText3 = new Text(endComp, SWT.BORDER);
        endText3.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        Button endEditButton2 = new Button(endComp, SWT.PUSH);
        endEditButton2.setText("编辑按钮");
        endEditButton2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    }
}

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

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

相关文章

『运维备忘录』之 Systemd 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

Java实现批量视频抽帧2.0

继上个版本 对其进行略微升级 &#x1f913; 上个版本仅对一个视频进行抽帧处理 此版本可对一个文件夹内的全部视频进行抽帧并对应的文件夹进行帧图片的保存 1️⃣配置pom.xml &#xff08;保持上次不变&#xff09; <dependencies><dependency><grou…

Jmeter组件执行顺序与作用域(超详细整理)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 一、Jmeter重要组件 1&#xff09;配置元件---Config Element&#xff1a; 用于初始化默认值…

缓存组件Caffeine的使用

caffeine是一个高性能的缓存组件&#xff0c;在需要缓存数据&#xff0c;但数据量不算太大&#xff0c;不想引入redis的时候&#xff0c;caffeine就是一个不错的选择。可以把caffeine理解为一个简单的redis。 1、导入依赖 <!-- https://mvnrepository.com/artifact/com.git…

Apache POI与easyExcel:Excel文件导入导出的技术深度分析

在处理Excel文件时&#xff0c;Java开发者经常会面临多种选择&#xff0c;其中Apache POI和easyExcel是两个非常受欢迎的选择。这两个库都提供了强大的Excel文件处理功能&#xff0c;但在性能、内存使用、API设计以及扩展性方面有所不同。本文将深入分析Apache POI和easyExcel在…

留学生乱用ChatGPT真的太致命!被认定学术不诚信直接被退学

01.ChatGPT留学生神器&#xff1f;作业论文全靠它&#xff1f; 近期留学圈内最火热的话题&#xff0c;肯定是关于ChatGPT。 “这个python作业我写不来&#xff0c;让ChatGPT帮我直接生成code就好了。” “论文英文的写不来&#xff0c;ChatGPT直接生成一篇essay&#xff0c;…

C语言实现跳表(附源码)

最近在刷一些链表的题目&#xff0c;在leetcode上有一道设计跳表的题目&#xff0c;也是通过查阅各种资料&#xff0c;自己实现出来&#xff0c;感觉这是种很神奇的数据结构。 一.简介 跳表与红黑树&#xff0c;AVL树等&#xff0c;都是一种有序集合&#xff0c;那既然是有序…

修复wordpress安全漏洞

1. 问题描述&#xff1a; 用wordpress建了一个网站&#xff0c;但是学校反映说存在安全漏洞&#xff0c;通过接口https://xxx.xxx.edu.cn/?rest_route/wp/v2/users/可以访问到一些内容&#xff0c;希望可以关闭这个接口。 2. 解决办法 一共两步 &#xff08;1&#xff09;在fu…

Linux网络编程——udp套接字

本章Gitee地址&#xff1a;udp套接字 文章目录 创建套接字绑定端口号读取数据发送数据聊天框输入框 创建套接字 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);int domain参数&#xff1a;表面要创建套接字的域…

Leetcode刷题笔记题解(C++):99. 恢复二叉搜索树

思路&#xff1a; 二叉搜索树的中序遍历是递增序列&#xff0c;可以在中序遍历中记录两个需要交换的节点&#xff0c;直到遍历完毕之后&#xff0c;对两个节点的值进行交换即可得到正确的二叉搜索树 比如中序序列为 1 2 3 7 5 6 4&#xff08;7比5大记录7为x&#xf…

Text Mesh Pro图文混排如何对任何图片都能实现

1&#xff09;Text Mesh Pro图文混排如何对任何图片都能实现 2&#xff09;Unity iOS平台的小图占用特别大的内存 3&#xff09;只在编辑器内&#xff0c;纹理不开启Read&Write情况下&#xff0c;如何获取纹理所有颜色值 4&#xff09;准备在海外发行游戏&#xff0c;有哪些…

STM32TIM时钟(1)

文章目录 前言一、介绍部分TIM简介了解定时器类型基本定时器框图通用定时器框图高级定时器框图定时器级联关系 所需简化定时器中断流程图时序部分预分频器时序计数器时序无影子寄存器计数器时序有影子寄存器计数器时序 时钟树 二、实例部分使用定时器计数使用对射红外传感器来控…

PyTorch学习系列教程:卷积神经网络【CNN】

本篇继续深度学习三大基石之卷积神经网络&#xff08;CNN&#xff09;——一类在计算机视觉领域大放异彩的网络架构。 LeNet5——CNN的开山之作 前篇介绍了DNN网络&#xff0c;理论上通过增加网络层数可以逼近任意复杂的函数&#xff0c;即通用近似定理。但在实践过程中&#…

Oracle 面试题 | 09.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Vue3动态CSS

Vue3动态CSS 动态css值动态css对象module模式 动态css值 <template><div class"div">动态css</div> </template><script setup langts> import {ref} from vueconst style ref(blue) </script><style scoped> .div{colo…

【30秒看懂大数据】数据存储

PS:本文属专栏第27篇 公众号&#xff1a;知幽科技 简单说 数据存储是指将数据保存在计算机或其他媒体上&#xff0c;以备将来检索和使用&#xff0c;就像保存文件在电脑硬盘或云存储中一样。 举例理解 听说周末要下大雨&#xff0c;所以我临时决定下班后去超市采购下周末…

深入理解Istio服务网格(一)数据平面Envoy

一、服务网格概述(service mesh) 在传统的微服务架构中&#xff0c;服务间的调用&#xff0c;业务代码需要考虑认证、熔断、服务发现等非业务能力&#xff0c;在某种程度上&#xff0c;表现出了一定的耦合性 服务网格追求高级别的服务流量治理能力&#xff0c;认证、熔断、服…

解锁1688关键字搜索API接口:从海量商品中快速定位,开启商业智能新篇章!

1688关键字搜索API接口技术详解 一、概述 1688关键字搜索API接口是阿里巴巴提供的一套应用程序接口&#xff0c;允许第三方开发者通过关键字搜索1688平台上的商品信息。通过使用这个接口&#xff0c;开发者可以快速获取符合特定关键字的商品列表、详情、属性等信息&#xff0…

Fink CDC数据同步(一)环境部署

1 背景介绍 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 Flink CDC 是 Apache Flink 的一组源连接器&#xff0c;基于数据库日志的…

MySQL进阶45讲【13】为什么表数据删掉一半,表文件大小不变?

1 前言 有些小伙伴在删数据库数据时&#xff0c;会产生一个疑问&#xff0c;我的数据库占用空间大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 那么这篇文章&#xff0c;就介绍一下数据库表的空间回收&#xff0c;看看如…