JaxaFx学习(一)

news2024/12/15 6:13:40

目录:

(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

 

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

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

相关文章

java抽奖系统(七)

8. 抽奖活动 8.1 新建抽奖活动 创建的活动信息包含&#xff1a; i. 活动名称 ii. 活动描述 iii. 圈选奖品&#xff1a;勾选对应奖品&#xff0c;并设置奖品等级&#xff08;⼀⼆三等奖&#xff09;&#xff0c;及奖品数量 iv. 圈选⼈员&#xff1a;勾选参与抽奖⼈员 库表关联…

Unity学习笔记(一)如何实现物体之间碰撞

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 如何实现物体之间碰撞 实现物体之间的碰撞关键组件&#xff1a;Rigidbody 2D(刚体)、Collider 2D(碰撞体)、Sprite Renderer&#xff08;Sprite渲染器&#xff09; 实现物体之间的碰撞 …

MATLAB 平面直线与直线求交(99)

MATLAB 平面直线与直线求交(99) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 平面上,给定两直线,直线由两个点确定,计算直线与直线的交点,理论上只要不平行就有交点,下面是计算代码和效果: 二、算法实现 1.代码 代码如下(示例): % 示例用法 % 定义两条线…

STM32单片机芯片与内部21 电源管理——低功耗 睡眠模式 停止模式 待机模式

目录 一、SMT32电源框图 1、ADC电源与参考电压VDDA 2、调压器供电电路VDD/1.8V 3、备份域电路 二、电源监控器 1、上电复位与掉电复位&#xff08;POR与PDR&#xff09; 2、可编程电压检测器 PVD 三、功耗模式 1、睡眠模式 2、停止模式 3、待机模式 电源对电子设备的…

数智读书笔记系列006 协同进化:人类与机器融合的未来

书名:协同进化&#xff1a;人类与机器融合的未来 作者:[美]爱德华阿什福德李 译者:李杨 出版时间:2022-06-01 ISBN:9787521741476 中信出版集团制作发行 爱德华・阿什福德・李&#xff08;Edward Ashford Lee&#xff09;是一位在计算机科学与工程领域颇具影响力的学者&am…

计算机网络知识点全梳理(一.TCP/IP网络模型)

目录 TCP/IP网络模型概述 应用层 什么是应用层 应用层功能 应用层协议 传输层 什么是传输层 传输层功能 传输层协议 网络层 什么是网络层 网络层功能 网络层协议 数据链路层 什么是数据链路层 数据链路层功能 物理层 物理层的概念和功能 TCP/IP网络模型概述…

docker启动一个helloworld(公司内网服务器)

这里写目录标题 容易遇到的问题&#xff1a;1、docker连接问题 我来介绍几种启动 Docker Hello World 的方法&#xff1a; 最简单的方式&#xff1a; docker run hello-world这会自动下载并运行官方的 hello-world 镜像。 使用 Nginx 作为 Hello World&#xff1a; docker…

Ubuntu 安装texstudio sty与texlive

手动安装需要的包 访问CTAN网站&#xff08;Comprehensive TeX Archive Network&#xff09;并下载enumitem宏包&#xff1a; enumitem CTAN页面下载后&#xff0c;将宏包解压到/usr/share/texmf/tex/latex/下。 可打开texstudio/帮助/宏包帮助下载。 如果不想手动安装一个个…

游戏引擎学习第42天

仓库: https://gitee.com/mrxiao_com/2d_game 简介 目前我们正在研究的内容是如何构建一个基本的游戏引擎。我们将深入了解游戏开发的每一个环节&#xff0c;从最基础的技术实现到高级的游戏编程。 角色移动代码 我们主要讨论的是角色的移动代码。我一直希望能够使用一些基…

SEGGER | 基于STM32F405 + Keil - RTT组件01 - 移植SEGGER RTT

导言 RTT(Real Time Transfer)是一种用于嵌入式中与用户进行交互的技术&#xff0c;它结合了SWO和半主机的优点&#xff0c;具有极高的性能。 使用RTT可以从MCU非常快速输出调试信息和数据&#xff0c;且不影响MCU实时性。这个功能可以用于很多支持J-Link的设备和MCU&#xff0…

【01】mysql安装后MySQL Configurator无法启动的问题

安装完Mysql之后打开MySql Configurator提示MySQL Configurator Internal error.(值不能为null.参数名:input) The Configurator will now close. mysql安装后MySQL Configurator无法启动的问题 文章目录 mysql安装后MySQL Configurator无法启动的问题1.MySQL Configurator无法…

重生之我在异世界学编程之C语言:深入文件操作篇(下)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 函数递归与迭代 引言正文一、文件的基本操作&#…

【论文阅读笔记】One Diffusion to Generate Them All

One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper&#xff1a;https://arxiv.org/abs/2411.16318 Code&#xff1a;https://github.com/lehduong/onediffusion Authors&#xff1…

Qt知识之 2. Windows下使用QtCreator创建的CMake项目,配置CMakeLists.txt文件生成sln文件方案

1. 先使用QtCreator创建CMake项目 到构建系统时&#xff0c;选择CMake。 2. 创建完成后&#xff0c;进入该项目文件夹 3. 在该文件夹空白处&#xff0c;右键启动Powershell命令行窗口 4. 使用命令行前&#xff0c;记得在系统环境变量中配置所用编译器的环境变量&#xff0c;…

C语言实验 函数一

时间:2024.12.14 6-1 弹球距离 double dist (double h,double p) {double sum = h,height;height = h*p;while(height>=TOL){sum += height * 2; //上行下行都算,所以是两倍的距离。height *=p;}return sum; } 6-2 使用函数输出一个整数的逆序数 错误代码:运行超…

【C语言实现:用队列模拟栈与用栈模拟队列(LeetCode 225 232)】

LeetCode刷题记录 &#x1f310; 我的博客主页&#xff1a;iiiiiankor&#x1f3af; 如果你觉得我的内容对你有帮助&#xff0c;不妨点个赞&#x1f44d;、留个评论✍&#xff0c;或者收藏⭐&#xff0c;让我们一起进步&#xff01;&#x1f4dd; 专栏系列&#xff1a;LeetCode…

STM32标准库学习之寄存器方法点亮LED灯

STM32C8T6最小系统开发板&#xff0c;点亮PC13引脚的LED灯 1.使能PC13引脚的定时器 PC13引脚为GPIOC组的第13个端口&#xff0c;GPIO的时钟使能定时器为RCC_APB2ENR&#xff0c;这是可以从手册中得出的&#xff0c;如下图所示 从下图可以得出&#xff0c;若要使能GPIOC端口&a…

探索 Echarts 绘图:数据可视化的奇妙之旅

目录 一、Echarts 初印象 二、搭建 Echarts 绘图环境 三、绘制第一个图表&#xff1a;柱状图的诞生 四、图表的美化与定制&#xff1a;让数据更具吸引力 1. 主题切换&#xff1a;一键变换风格 2. 颜色调整&#xff1a;色彩搭配的艺术 3. 标签与提示框&#xff1a;丰富信…

泷羽sec-burp(6)暴力破解与验证码识别绕过(下,验证码识别绕过0) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

docker快速实现ELK的安装和使用

目录 一、ELK功能原理 二、项目功能展示​ 三、日志查询展示​ 四、ELK安装步骤 1、创建elasticsearch、kibana、filebeat相关data、log、conf目录 2、进入/usr/local/elk目录&#xff0c;并创建一个docker网络 3、启动 elasticsearch容器 4、运行kibana容器 5、启动f…