JaxaFx学习(一)

目录:

(1)基本结构

(2)Application

(3)Stage窗口显示

(4)Scene场景切换

(5)UI控件通用属性

(6)UI控件属性绑定很属性监听

(7)事件驱动编程

(8)Color、Font、Image

(9)FXML布局文件

(10)Scene Builder构建fxml布局文件

(1)基本结构

 //入口函数调用lanch方法,launch会自动的调用start方法

 

(2)Application

Application有一个获取主机服务的方法:

调用它的showDocument给他一个网址:进行跳转

 

package org.example;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Main extends Application {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //入口函数调用lanch方法,launch会自动的调用start方法
        Application.launch(args);
    }

    @Override
    public void init() throws Exception {
        super.init();
        //init可以做数据初始化的操作:建立数据库连接之类的,可以新建一个线程去连接数据库,跟start方法同步执行
    }

    @Override
    public void start(Stage primaryStage) throws Exception {//窗口Stage

        //窗口是否可以改变大小
        primaryStage.setResizable(true);
        //设置窗口图标
        primaryStage.getIcons().add(new Image("images/logo.jpg"));
        //窗口样式
        primaryStage.initStyle(StageStyle.DECORATED);

        Label label=new Label("Hello");//标签
        Button button=new Button("跳转");


        BorderPane borderPane=new BorderPane(button);//把标签放到,布局里,BorderPane会把布局划分为上下左右中,加的标签默认放到中间

        //按钮点击事件
        button.setOnAction(e ->{
            getHostServices().showDocument("www.baidu.com");
        });

        //场景
        Scene scene=new Scene(borderPane,300,300);//布局放到场景里面

        primaryStage.setScene(scene);//场景放到窗口里

        primaryStage.setTitle("窗口");//标题
        primaryStage.show();
    }

    @Override
    public void stop() throws Exception {
        super.stop();
        //做清理资源的操作
    }
}
 

 点击跳转:

(3)Stage窗口显示


package org.example;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.util.Optional;

public class Stage0 extends Application {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //入口函数调用lanch方法,launch会自动的调用start方法
        Application.launch(args);
    }

    @Override
    public void init() throws Exception {
        super.init();
        //init可以做数据初始化的操作:建立数据库连接之类的,可以新建一个线程去连接数据库,跟start方法同步执行
    }

    @Override
    public void start(Stage primaryStage) throws Exception {//窗口Stage

        //窗口是否可以改变大小
        primaryStage.setResizable(true);
        //设置窗口图标
        primaryStage.getIcons().add(new Image("images/logo.jpg"));
        //窗口样式
        primaryStage.initStyle(StageStyle.DECORATED);


        Button button0=new Button("跳转");
        Button button1=new Button("跳转");
        button0.setLayoutX(200);
        button0.setLayoutY(200);
        button1.setLayoutX(200);
        button1.setLayoutY(250);



        //组件图,树形结构组件图
        AnchorPane anchorPane=new AnchorPane();
        anchorPane.getChildren().addAll(button0,button1);

        //按钮点击事件
        button0.setOnAction(e ->{
            //显示新窗口
            Stage stage=new javafx.stage.Stage();
            stage.setHeight(200);
            stage.setWidth(300);
            stage.initModality(Modality.WINDOW_MODAL);//none:非模态  APPLICATION_MODAL:模态其他窗口不能使用 WINDOW_MODAL:需要设置下父窗口,只有父窗口不能使用
            stage.initOwner(primaryStage);
            stage.setTitle("父模态窗口");
            stage.show();//显示新窗口
        });

        button1.setOnAction(e ->{
            Stage stage=new javafx.stage.Stage();
            stage.setHeight(200);
            //没有设置默认为非模态
            stage.initModality(Modality.NONE);
            stage.setWidth(300);
            stage.setTitle("非模态窗口");
            stage.show();
        });

        //取消系统默认退出事件
        Platform.setImplicitExit(false);
        primaryStage.setOnCloseRequest(event -> {
            event.consume();//关闭窗口的动作

            Alert alert=new Alert(Alert.AlertType.CONFIRMATION);
            alert.setTitle("退出程序");
            alert.setHeaderText(null);
            alert.setContentText("您是否要退出程序?");
            Optional<ButtonType> result=alert.showAndWait();
            if (result.get()==ButtonType.OK){
                Platform.exit();//退出程序
                primaryStage.close();//只是退出窗口,程序还在运行
            }
        });

        //场景
        Scene scene=new Scene(anchorPane,300,300);//布局放到场景里面

        primaryStage.setScene(scene);//场景放到窗口里

        primaryStage.setTitle("窗口");//标题
        primaryStage.show();
    }

    @Override
    public void stop() throws Exception {
        super.stop();
        //做清理资源的操作
    }
}

点击第二个按钮:他是非模态的

点击第一个按钮:他是模态的,设置了父窗口模态 

 

非模态窗口此时是可以使用的

 (4)Scene场景切换


package org.example;

import javafx.application.Application;
import javafx.scene.ImageCursor;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Scene1 extends Application {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //入口函数调用lanch方法,launch会自动的调用start方法
        Application.launch(args);
    }

    @Override
    public void init() throws Exception {
        super.init();
        //init可以做数据初始化的操作:建立数据库连接之类的,可以新建一个线程去连接数据库,跟start方法同步执行
    }

    @Override
    public void start(Stage primaryStage) throws Exception {//窗口Stage

        //窗口是否可以改变大小
        primaryStage.setResizable(true);
        //设置窗口图标
        primaryStage.getIcons().add(new Image("images/logo.jpg"));
        //窗口样式
        primaryStage.initStyle(StageStyle.DECORATED);

        //Label label=new Label("Hello");//标签
        Button button0=new Button("跳转");

        button0.setLayoutX(200);
        button0.setLayoutY(200);

        AnchorPane anchorPane=new AnchorPane();//把标签放到,布局里,BorderPane会把布局划分为上下左右中,加的标签默认放到中间

        anchorPane.getChildren().addAll(button0);

        //场景
        Scene scene=new Scene(anchorPane,300,300);//布局放到场景里面

        Label label2=new Label("JavaFx");//标签
        Button button1=new Button("返回原场景");
        label2.setLayoutX(200);
        label2.setLayoutY(200);
        button1.setLayoutX(200);
        button1.setLayoutY(250);
        AnchorPane anchorPane1=new AnchorPane();
        anchorPane1.getChildren().addAll(button1,label2);

        //场景二
        Scene scene1=new Scene(anchorPane1,500,500);
        //设置鼠标箭头
        scene1.setCursor(new ImageCursor(new Image("images/logo.jpg")));

        //按钮点击事件
        button0.setOnAction(e ->{
           primaryStage.setScene(scene1);//切换场景

        });
        button1.setOnAction(e ->{
            primaryStage.setScene(scene);//切换场景

        });


        primaryStage.setScene(scene);//场景放到窗口里

        primaryStage.setTitle("窗口");//标题
        primaryStage.show();
    }

    @Override
    public void stop() throws Exception {
        super.stop();
        //做清理资源的操作
    }
}

点击跳转:

点击返回就返回到了原场景

(5)UI控件通用属性

所有控件都继承父类Node ,你想用node里面的方法,只能用它的子类Button、CheckBox等等

package org.example;

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

/**
 * UI控件的通用属性
 *
 */
public class Node extends Application {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //入口函数调用lanch方法,launch会自动的调用start方法
        Application.launch(args);
    }


    @Override
    public void start(Stage primaryStage) throws Exception {//窗口Stage

        //窗口是否可以改变大小
        primaryStage.setResizable(true);

        Label label=new Label("Hello");//标签
        //设置坐标
        label.setLayoutX(200);
        label.setLayoutY(200);
        //设置样式
        label.setStyle("-fx-background-color: red;-fx-border-color: blue;-fx-border-width:3px");
        //设置宽度
        label.setPrefWidth(200);
        label.setPrefHeight(50);
        //设置内容居中
        label.setAlignment(Pos.CENTER);

        //设置这个控件是否显示
        //label.setVisible(false);

        //设置控件透明度,半透明
        label.setOpacity(0.5);

        //设置旋转,旋转90度
        label.setRotate(90);

        //设置平移 x轴平移
        label.setTranslateX(60);
        label.setTranslateY(100);

        //parent:父节点 scene:场景

        AnchorPane anchorPane=new AnchorPane();
        anchorPane.getChildren().add(label);

        //场景
        Scene scene=new Scene(anchorPane,500,500);//布局放到场景里面
        primaryStage.setScene(scene);//场景放到窗口里

        primaryStage.setTitle("窗口");//标题
        primaryStage.show();
    }

}

(6)UI控件属性绑定很属性监听

属性绑定使用的是Property这个接口,node里面使用的这个接口的一些子类实例

绑定解绑方法:第一个是单向绑定,第二个是双向绑定 

package org.example;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

/**
 * UI控件的属性绑定和属性监听
 *
 */
public class Property extends Application {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //入口函数调用lanch方法,launch会自动的调用start方法
        Application.launch(args);
    }


    @Override
    public void start(Stage primaryStage) throws Exception {//窗口Stage

        //窗口是否可以改变大小
        primaryStage.setResizable(true);

        AnchorPane anchorPane=new AnchorPane();

        Scene scene=new Scene(anchorPane,500,500);

        Circle circle=new Circle();
        //圆的x轴Y轴中心点位置
        circle.setCenterX(250);
        circle.setCenterY(250);
        circle.setRadius(100);//半径
        circle.setFill(Color.WHITE);//填充颜色
        circle.setStroke(Color.BLACK);//边框

        //设置属性绑定:中心点绑定到场景的宽度和高度,让这个圆随着场景的变化而变化
        circle.centerXProperty().bind(scene.widthProperty().divide(2));//圆的中心点对应场景的宽度除以2
        circle.centerYProperty().bind(scene.heightProperty().divide(2));//圆的中心点对应场景的高度除以2

        //设置监听器:中心点监听
        circle.centerXProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                System.out.println("x轴中心点,原来是:"+oldValue+" 现在是:"+newValue);
            }
        });

        anchorPane.getChildren().add(circle);

        primaryStage.setScene(scene);//设置场景




        primaryStage.setTitle("窗口");//标题
        primaryStage.show();
    }

}

窗口大小变化,圆中心点也变化 

 

属性也进行了监听

(7)事件驱动编程

事件源:产生事件的控件,如Button

事件处理者:各式各样的EventHandler

  每个事件源都可以设置一个事件处理者对象,传一个事件对象,

事件对象:ActionEvent,包含很多 对事件相关的一系列对象、参数

有很多事件

每个应用程序都应该对用户的操作进行反应,对用户的操作产生的事件进行处理

package org.example;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.*;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

import java.security.Key;

/**
 * 绑定事件
 *
 */
public class Event extends Application {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //入口函数调用lanch方法,launch会自动的调用start方法
        Application.launch(args);
    }


    @Override
    public void start(Stage primaryStage) throws Exception {//窗口Stage
        //窗口是否可以改变大小
        primaryStage.setResizable(true);
        //组件图,树形结构组件图
        AnchorPane anchorPane=new AnchorPane();
        //场景
        Scene scene=new Scene(anchorPane,500,500);//布局放到场景里面

        Label label=new Label("Hello");//标签
        label.setLayoutX(200);
        label.setLayoutY(200);

        Button button=new Button("向上移动");
        button.setLayoutX(300);
        button.setLayoutY(200);

        //设置事件:按钮点击标签向上移动5
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                label.setLayoutY(label.getLayoutY()-5);
            }
        });
        //设置键盘按下事件,可以设置控件,也可以设置给场景
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                KeyCode keyCode=event.getCode();//获取键盘键
                if (keyCode.equals(KeyCode.DOWN)){//向下箭头
                    label.setLayoutY(label.getLayoutY()+5);
                }
            }
        });


        //拖拽事件:当拖拽文件到文本框上时,显示文件的相对路径
        TextField textField=new TextField();
        textField.setLayoutX(100);
        textField.setLayoutY(100);
        //拖拽到这上面是弹出
        textField.setOnDragOver(new EventHandler<DragEvent>() {
            @Override
            public void handle(DragEvent event) {
                event.acceptTransferModes(TransferMode.ANY);//设置显示一个箭头
            }
        });
        //松开手时弹出
        textField.setOnDragDropped(event -> {
            Dragboard dragboard=event.getDragboard();//获取托盘
            if (dragboard.hasFiles()){
                String path=dragboard.getFiles().get(0).getAbsolutePath();//获取绝对路径
                textField.setText(path);//设置到文本框里面
            }
        });

        anchorPane.getChildren().addAll(label,button,textField);


        primaryStage.setScene(scene);//场景放到窗口里

        primaryStage.setTitle("窗口");//标题
        primaryStage.show();
    }

}

 

点击按钮:

按键盘向下的箭头:

移动一个文件:获取地址

(8)Color、Font、Image

Color:有好多种使用方法 

 color的静态常量

 

package org.example;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;



/**
 * 字体、颜色、图片
 *
 */
public class ColorFontImage extends Application {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //入口函数调用lanch方法,launch会自动的调用start方法
        Application.launch(args);
    }


    @Override
    public void start(Stage primaryStage) throws Exception {//窗口Stage

        //窗口是否可以改变大小
        primaryStage.setResizable(true);

        //组件图,树形结构组件图
        AnchorPane anchorPane=new AnchorPane();

        Scene scene=new Scene(anchorPane,500,500);

        Circle circle=new Circle();
        //圆的x轴Y轴中心点位置
        circle.setCenterX(250);
        circle.setCenterY(250);
        circle.setRadius(100);//半径

        //设置填充色
        //circle.setFill(Color.rgb(255,0,0));
        circle.setFill(Color.web("#f66a08"));

        //设置边框
        circle.setStroke(Color.BLUE);
        circle.setStrokeWidth(10);//边框宽度

        //字体
        Label label=new Label("你好");
        label.setLayoutX(100);
        label.setLayoutY(100);
        //label.setFont(new Font(30));
        label.setFont(Font.font("今天想你到这里", FontWeight.BOLD,30));

        //图片
        ImageView imageView=new ImageView();//图片放到里面
        Image image=new Image("images/logo.jpg");
        imageView.setImage(image);

        anchorPane.getChildren().addAll(imageView,circle);

        primaryStage.setScene(scene);//设置场景




        primaryStage.setTitle("窗口");//标题
        primaryStage.show();
    }

}

(9)FXML布局文件

使用fxml文件代理在start里面控件和代码 

package org.example;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;


/**
 * fxml的运用:现实视图、控制器、java代码就实现了分离,主进程里面的代码会非常简介
 *
 */
public class fxml extends Application {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        //入口函数调用lanch方法,launch会自动的调用start方法
        Application.launch(args);
    }


    @Override
    public void start(Stage primaryStage) throws Exception {//窗口Stage

        //窗口是否可以改变大小
        primaryStage.setResizable(true);

       /* //字体
        Label label=new Label("你好");
        label.setLayoutX(150);
        label.setLayoutY(200);

        Button button=new Button("向上移动");
        button.setLayoutX(150);
        button.setLayoutY(260);

        //设置事件:按钮点击标签向上移动5
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                label.setLayoutY(label.getLayoutY()-5);
            }
        });

        //组件图,树形结构组件图
        AnchorPane anchorPane=new AnchorPane();
        anchorPane.getChildren().addAll(label,button);*/

        //使用fxml的布局,进行引入fxml

        Pane anchorPane= FXMLLoader.load(getClass().getResource("/fxml/buttonLabel.fxml"));


        Scene scene=new Scene(anchorPane,500,500);

        primaryStage.setScene(scene);//设置场景


        primaryStage.setTitle("窗口");//标题
        primaryStage.show();
    }

}

控件实例: 

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<?import javafx.scene.text.Font?>
<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fx:controller="org.example.controller.buttonLabelController"
            prefHeight="400.0" prefWidth="600.0">

    <!--children:变量是一个容器里面装了两个节点label、button-->
    <children>
        <!--label标签的类名作为标签名  如果想在controller中使用label需要设置一个id-->
        <Label fx:id="la" text="你好" layoutX="150" layoutY="200">
            <!--给label设置字体,设置的是font对象类型,必须设置子标签的形式-->
            <font>
                <Font size="30"></Font>
            </font>
        </Label>

        <!--设置点击事件 :#onUp会调用controller中的方法-->
        <Button fx:id="bu" text="向上移动" layoutX="150" layoutY="260" onAction="#onUp"></Button>
    </children>

</AnchorPane>

创建视图的控制器,编写功能代码:

package org.example.controller;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;


public class buttonLabelController {
    @FXML
    Label la;

    @FXML
    Button bu;

    public void onUp(ActionEvent event){
        la.setLayoutY(la.getLayoutY() -5);
    }

}

 

fxml的运用:现实视图、控制器、java代码就实现了分离,主启动类里面的代码会非常简介

(10)Scene Builder构建fxml布局文件

他可以实现以拖拽的方式创建fxml文件

拖拽这个布局 

布局属性 

Code跟controller的代码有关 

 

生成代码:

 生成一个controller:

保存fxml:

 把生成的fxml的放进创建的这个项目,更改加载

 

设置一下controller

 

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

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

相关文章

悬赏任务源码(悬赏发布web+APP+小程序)开发附源码

悬赏任务源码是指一个软件或网站的源代码&#xff0c;用于实现悬赏任务的功能。悬赏任务是指发布方提供一定的奖励&#xff0c;希望能够找到解决特定问题或完成特定任务的人。悬赏任务源码通常包括任务发布、任务接受、任务完成和奖励发放等功能的实现。搭建悬赏任务源码是一个…

Java集合操作中的包含性判断:深入探讨List.contains()方法

文章目录 Java集合操作中的包含性判断&#xff1a;深入探讨List.contains()方法问题分析与解答1. 为什么list.contains(filterValueList)返回false&#xff1f;2. 正确的实现方法方法一&#xff1a;使用containsAll()方法二&#xff1a;Stream流操作方法三&#xff1a;传统循环…

帆软的无数据展示方案

文章目录 需求描述第一步、设置控件第二步、设置数据集优化改进 在日常工作中&#xff0c;使用到帆软报表工具&#xff0c;以下记录日常使用的过程&#xff0c; 需求描述 用帆软报表展示销量的信息&#xff0c;选择不同的订单状态&#xff0c;展示其订单数和总金额。 第一步、…

ubuntu20.04安装qt creator

以上三种&#xff0c;选择其一安装即可 回答1&#xff1a; 您可以按照以下步骤在ubuntu 20.04上安装Qt Creator&#xff1a; 打开终端并输入以下命令以更新软件包列表&#xff1a; sudo apt update 安装Qt Creator和Qt库&#xff1a; sudo apt install qtcreator qt5-def…

MySQL系列之数据类型(String)

导览 前言一、字符串类型知多少1. 类型说明2. 字符和字节的转换 二、字符串类型的异同1. CHAR & VARCHAR2. BINARY & VARBINARY3. BLOB & TEXT4. ENUM & SET 结语精彩回放 前言 MySQL数据类型第三弹闪亮登场&#xff0c;欢迎关注O。 本篇博主开始谈谈MySQL是如…

linux网络编程 | c | select实现多路IO转接服务器

poll实现多路IO转接服务器 基于该视频完成 04-poll函数实现服务器_哔哩哔哩_bilibili 通过响应式–多路IO转接实现 要求&#xff1a;能看懂看&#xff0c;看不懂也没啥大事&#xff0c;现在基本都用epoll代替了 大家看视频思路吧&#xff0c;代码就是从讲义里面copy了一份…

数组专题leetcode

链表适合插入、删除&#xff0c;时间复杂度 O(1) 数组是适合查找操作&#xff0c;但是查找的时间复杂度并不为 O(1)。即便是排好序的数组&#xff0c;你用二分查找&#xff0c;时间复杂度也是 O(logn) 数组&#xff1a;内存连续的存储相同类型 【数组插入】: 如果在数组的末…

开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力

在当今竞争激烈的商业环境中&#xff0c;私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性&#xff0c;从多个维度为私域流量运营提供了强有力的支持与推动&#xff0c;以下将详细阐述其在各个方面的…

nginx中的root和alias的区别

alias 在E:\\test\\目录下创建一个index.html文件 在nginx.conf文件配置alias,路径填写为绝对路径&#xff0c;但是要注意&#xff0c;这里结尾是文件夹的名字 然后下面的/aa/ 是随便起的名字&#xff0c;也不是文件夹的名字&#xff0c;在浏览器访问的使用的 在浏览器使用 …

MySQL之数据库三大范式

一、什么是范式&#xff1f; 范式是数据库遵循设计时遵循的一种规范&#xff0c;不同的规范要求遵循不同的范式。 &#xff08;范式是具有最小冗余的表结构&#xff09; 范式可以 提高数据的一致性和 减少数据冗余和 更新异常的问题 数据库有六种范式&#xff08;1NF/2NF/3NF…

【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系

起因&#xff1a; https://www.hiascend.com/document/detail/zh/Atlas%20200I%20A2/23.0.0/re/npu/npusmi_013.html npu-smi info -l查询所有NPU设备&#xff1a; [naienotebook-npu-bd130045-55bbffd786-lr6t8 DCNN]$ npu-smi info -lTotal Count : 1NPU…

TcpServer 服务器优化之后,加了多线程,对心跳包进行优化

TcpServer 服务器优化之后&#xff0c;加了多线程&#xff0c;对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…

ansible自动化运维(一)简介及清单,模块

相关文章ansible自动化运维&#xff08;二&#xff09;playbook模式详解-CSDN博客ansible自动化运维&#xff08;三&#xff09;jinja2模板&&roles角色管理-CSDN博客ansible自动化运维&#xff08;四&#xff09;运维实战-CSDN博客 ansible自动化运维工具 1.什么是自…

MATLAB四种逻辑运算

MATLAB中的四种逻辑运算包括逻辑与用&或 a n d 表示 ( 全为 1 时才为 1 &#xff0c;否则为 0 ) and表示(全为1时才为1&#xff0c;否则为0) and表示(全为1时才为1&#xff0c;否则为0)&#xff0c;逻辑或用|或 o r 表示 ( 有 1 就为 1 &#xff0c;都为 0 才为 0 ) or表示…

基于Spring Boot + Vue的摄影师分享交流社区的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

鸿蒙NEXT开发案例:世界时间表

【引言】 本案例将展示如何使用鸿蒙NEXT框架开发一个简单的世界时钟应用程序。该应用程序能够展示多个城市的当前时间&#xff0c;并支持搜索功能&#xff0c;方便用户快速查找所需城市的时间信息。在本文中&#xff0c;我们将详细介绍应用程序的实现思路&#xff0c;包括如何…

Windows如何安装Php 7.4

一、进入官网&#xff0c;选择其他版本 https://windows.php.net/download/ 二、配置环境变量 将解压后的php 路径在系统环境变量中配置一下 cmd 后输入 php-v

yosys内部数据结构

一、参考链接 1.Yosys内部结构doxygen文件 yosys-master: RTLIL Namespace Reference 2.yosys内部结构介绍 https://yosyshq.readthedocs.io/projects/yosys/en/docs-preview-cellhelp/yosys_internals/formats/rtlil_rep.html 二、概览 图 1 网表核心数据结构 如图 1所示…

Java性能调优 - 多线程性能调优

锁优化 Synchronized 在JDK1.6中引入了分级锁机制来优化Synchronized。当一个线程获取锁时 首先对象锁将成为一个偏向锁&#xff0c;这样做是为了优化同一线程重复获取锁&#xff0c;导致的用户态与内核态的切换问题&#xff1b;其次如果有多个线程竞争锁资源&#xff0c;锁…

window的conda环境下espeak not installed on your system问题解决

1 问题描述 windows的conda环境下运行VITS2模型预处理&#xff0c;报出如下错误&#xff1a; Traceback (most recent call last):File "D:\ml\vits2\filelists.py", line 63, in <module>text_norm tokenizer(text_norm, Vocab, cleaners, languagehps.dat…