文章目录

  • Java: JavaFX桌面GUI开发
  • 1、基本概念
  • 2、最小框架代码
  • 3、控件布局
  • 4,初步认识stage窗口
  • 5,stage窗口模式(StageStyle)
  • 6,screen类的使用
  • 7,Group容器的使用
  • 8,Button按钮以及简单介绍设置背景颜色和外边框等问题
  • 9,JavaFX布局(pane)
  • (1). Pane
  • (2). BorderPane
  • (3). HBox
  • (4). VBox
  • (5) FlowPane面板
  • (6), GridPane面板
  • 用户界面设计例子

Java: JavaFX桌面GUI开发

1、基本概念

  • 窗口 Stage

  • 场景 Scene

  • 布局 stackPane

  • 控件 Button

2、最小框架代码

创建命令行应用

package com.company;import javafx.application.Application;
import javafx.stage.Stage;public class HelloWorld extends Application {@Overridepublic void start(Stage primaryStage) throws Exception {primaryStage.show();       //显示窗口}public static void main(String[] args) {launch(args);           //启动这个程序  APPlication的方法}
}

对就是啥都没有,空白的窗体

3、控件布局

package com.company;import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;public class Main extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage primaryStage) throws Exception {// 实例化按钮Button button = new Button("这是按钮上的文字");// 创建布局控件    //其他各种布局StackPane,FlowPane,HBox,VBox,GridPane,BorderPaneStackPane stackPane = new StackPane();// 将button添加到布局stackPane.getChildren().add(button);// 创建场景 宽=400 高=400Scene scene = new Scene(stackPane, 400, 400);// 将场景添加到窗口primaryStage.setScene(scene);// 显示窗口primaryStage.show();}
}

4,初步认识stage窗口

primaryStage.setTitle("JavaFX");    //添加标题 primaryStage.getIcons().add(new Image("ico/tim.png"));    //设置图标  primaryStage.setIconified(true);       //设置最小化primaryStage.setMaximized(true);     //设置最大化primaryStage.close();      //关闭窗口rimaryStage.setResizable(false);        //设置窗口大小是否可调整primaryStage.setWidth(500); primaryStage.setHeight(500);    //设置窗口宽度和高度primaryStage.setWidth(500); primaryStage.setHeight(500);      //设置窗口最大宽高primaryStage.getWidth();<br />primaryStage.getHeight()     //获取窗口宽高primaryStage.show();     //显示窗口primaryStage.setOpacity(0.5);   //设置窗口不透明度primaryStage.setAlwaysOnTop(true);       //设置在窗口永远在最上层rimaryStage.setX(100); <br />primaryStage.setY(100);      //设置窗口的位置(左上角像素坐标)Platform.exit();          //终止JavaFX应用程序
primaryStage.setFullScreen(true);
primaryStage.setScene(new Scene(new Group()));        //设置全屏,必需设置Scene//设置高度变化监听
primaryStage.heightProperty().addListener(new ChangeListener<Number>() {@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {System.out.println("当前高度 ==>" + newValue.intValue());
}
});//设置宽度变化监听
primaryStage.widthProperty().addListener(new ChangeListener<Number>() {@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {System.out.println("当前宽度 ==>" +newValue.intValue() );
}
});//设置窗口位置X轴坐标监听
primaryStage.xProperty().addListener(new ChangeListener<Number>() { <br />@Override <br />public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {<br /> System.out.println("窗口X轴坐标= " + newValue.intValue());<br /> } <br />});//设置窗口位置Y轴坐标监听
primaryStage.yProperty().addListener(new ChangeListener<Number>() { <br /> @Override<br /> public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {<br /> System.out.println("窗口Y轴坐标= " + newValue.intValue());<br /> }<br /> });

实例代码

public class Main extends Application {@Overridepublic void start(Stage primaryStage) throws Exception{// 添加标题primaryStage.setTitle("JavaFX");// 设置图标primaryStage.getIcons().add(new Image("ico/tim.png"));// 设置最小化//primaryStage.setIconified(true);//设置最大化// primaryStage.setMaximized(true);// 关闭窗口// primaryStage.close();//设置窗口宽度和高度primaryStage.setWidth(500);primaryStage.setHeight(500);// 设置窗口大小是否可调整// primaryStage.setResizable(false);// 设置窗口最大宽高primaryStage.setMaxWidth(1000);primaryStage.setMaxHeight(1000);// 获取窗口宽高System.out.println("宽度= " + primaryStage.getWidth());System.out.println("高度= " + primaryStage.getHeight());// 设置高度变化监听primaryStage.heightProperty().addListener(new ChangeListener<Number>() {@Overridepublic void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {System.out.println("当前高度 ==>" + newValue.intValue());}});//设置宽度变化监听primaryStage.widthProperty().addListener(new ChangeListener<Number>() {@Overridepublic void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {System.out.println("当前宽度 ==>" +newValue.intValue() );}});// 设置全屏,必需设置SceneprimaryStage.setFullScreen(true);primaryStage.setScene(new Scene(new Group()));// 显示窗口primaryStage.show();}public static void main(String[] args) {launch(args);}
}
@Override
public void start(Stage primaryStage) throws Exception {// 设置窗口不透明度//primaryStage.setOpacity(0.5);// 设置在窗口永远在最前面(置顶)//primaryStage.setAlwaysOnTop(true);//设置窗口宽度和高度primaryStage.setWidth(500);primaryStage.setHeight(500);// 设置窗口的位置(左上角像素坐标)primaryStage.setX(100);primaryStage.setY(100);// 设置窗口位置X轴坐标监听primaryStage.xProperty().addListener(new ChangeListener<Number>() {@Overridepublic void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {System.out.println("窗口X轴坐标= " + newValue.intValue());}});// 设置窗口位置Y轴坐标监听primaryStage.yProperty().addListener(new ChangeListener<Number>() {@Overridepublic void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {System.out.println("窗口Y轴坐标= " + newValue.intValue());}});primaryStage.show();
}

5,stage窗口模式(StageStyle)

public class Main2 extends Application {@Overridepublic void start(Stage primaryStage) throws Exception {Stage s1 = new Stage();s1.setTitle("s1");//纯白背景和平台装饰s1.initStyle(StageStyle.DECORATED);s1.show();Stage s2 = new Stage();s2.setTitle("s2");//透明背景且没有装饰s2.initStyle(StageStyle.TRANSPARENT);s2.show();Stage s3 = new Stage();s3.setTitle("s3");//纯白背景,无装饰。s3.initStyle(StageStyle.UNDECORATED);s3.show();Stage s4 = new Stage();s4.setTitle("s4");//纯白背景和最少平台装饰s4.initStyle(StageStyle.UNIFIED);s4.show();Stage s5 = new Stage();s5.setTitle("s5");//一个统一标准的舞台s5.initStyle(StageStyle.UTILITY);s5.show();// 终止JavaFX应用程序Platform.exit();}public static void main(String[] args) {launch();}
}

public class Main3 extends Application {@Overridepublic void start(Stage primaryStage) throws Exception {Stage s1 = new Stage();//s1.setTitle("s1");s1.show();Stage s2 = new Stage();//s2.initOwner(s1);s2.setTitle("s2");s2.show();Stage s3 = new Stage();//阻止事件传递到任何其他应用程序窗口s3.initModality(Modality.APPLICATION_MODAL);s3.initOwner(s2);// 阻止事件传递到所有者的窗口//s3.initModality(Modality.WINDOW_MODAL);s3.setTitle("s3");s3.show();}public static void main(String[] args) {launch(args);}
}

6,screen类的使用

public class Main6 extends Application {@Overridepublic void start(Stage primaryStage) throws Exception {// 获取屏幕对象Screen screen = Screen.getPrimary();// 获取屏幕dpidouble dpi = screen.getDpi();System.out.println("当前屏幕dpi ==>" + dpi);//获取屏幕宽高 Rectangle2D [minX = 0.0, minY=0.0, maxX=2560.0, maxY=1440.0, width=2560.0, height=1440.0]Rectangle2D rec1 = screen.getBounds();// 获取屏幕可视宽高 Rectangle2D [minX = 0.0, minY=0.0, maxX=2560.0, maxY=1400.0, width=2560.0, height=1400.0]Rectangle2D rec2 = screen.getVisualBounds();System.out.println("屏幕宽高 ==>" + rec1);System.out.println("屏幕可视宽高 ==>" + rec2);Platform.exit();}public static void main(String[] args) {launch(args);}
}

窗口结构 Stage包含 scene ,scene 包含Node

public class Main7 extends Application {@Overridepublic void start(Stage primaryStage) throws Exception {// 打开网页HostServices host = getHostServices();host.showDocument("www.baidu.com");// 获取资源地址URL url = getClass().getClassLoader().getResource("ico/tim.png");String path = url.toExternalForm();// 结构 Stage包含 scene 包含 NodeButton button = new Button("按钮");button.setPrefWidth(200);button.setPrefHeight(100);Group group = new Group();boolean add = group.getChildren().add(button);// 场景对象Scene scene = new Scene(group);// 设置场景图上光标样式//scene.setCursor(Cursor.CLOSED_HAND);// 自定义光标scene.setCursor(Cursor.cursor(path));primaryStage.setScene(scene);primaryStage.setTitle("Javafx");primaryStage.setHeight(800);primaryStage.setWidth(800);primaryStage.show();}public static void main(String[] args) {launch(args);}
}

7,Group容器的使用

public class Main8 extends Application {// bt1按钮增加事件 自增参数int i = 0;@Overridepublic void start(Stage primaryStage) throws Exception {// 定义按钮Button bt1 = new Button("bt1");Button bt2 = new Button("bt2");Button bt3 = new Button("bt3");// 设置按钮布局位置bt1.setLayoutX(0);bt1.setLayoutY(0);// 设置按钮大小bt1.setPrefHeight(50);bt1.setPrefWidth(100);bt2.setLayoutX(200);bt2.setLayoutY(0);bt2.setPrefHeight(50);bt2.setPrefWidth(100);bt3.setLayoutX(400);bt3.setLayoutY(0);bt3.setPrefHeight(50);bt3.setPrefWidth(100);Group group = new Group();// 设置Group的不透明度//group.setOpacity(0.5);// 自动调整子节点尺寸,默认是true,设置为false是子节点宽高为0group.setAutoSizeChildren(true);// 在Grounp容器中添加按钮group.getChildren().add(bt1);group.getChildren().addAll(bt1,bt2,bt3);// 在Grounp容器中中移除按钮//group.getChildren().remove(bt1);// 清除容器中全部元素//group.getChildren().clear();// 判断坐标点是否有子组件System.out.println(group.contains(1,1));// 获取所有子组件Object[] objects = group.getChildren().toArray();for(Object o: objects){Button btn = (Button) o;btn.setPrefWidth(100);btn.setPrefHeight(100);}// 增加子节点列表监听group.getChildren().addListener(new ListChangeListener<Node>() {@Overridepublic void onChanged(Change<? extends Node> c) {System.out.println("当前子组件数量==> " +  c.getList().size());}});// bt1按钮增加事件bt1.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent event) {Button but4 = new Button("but4");but4.setLayoutY(100);but4.setLayoutX(i);but4.setPrefHeight(100);but4.setPrefWidth(100);group.getChildren().add(but4);i = i + 100;}});Scene scene = new Scene(group);primaryStage.setScene(scene);primaryStage.setTitle("javafx");primaryStage.setHeight(800);primaryStage.setWidth(800);primaryStage.show();}public static void main(String[] args) {launch(args);}
}

8,Button按钮以及简单介绍设置背景颜色和外边框等问题


设置背景颜色

// 设置背景颜色
// Paint 颜色
// CornerRadii 圆角
//Insets 内边距
//b1.setBackground(new Background(new BackgroundFill(Color.LIGHTBLUE,new CornerRadii(10),new Insets(5,0,0,0)) ));// 背景填充
// Paint 颜色 可以直接用Color.LIGHTBLUE 获取颜色
// Paint.valueOf("#87CEEB55")  前六位颜色代码,后两位不透明度
// CornerRadii 圆角半径
//Insets 内边距
BackgroundFill bgf = new BackgroundFill(Paint.valueOf("#87CEEB55"),new CornerRadii(20),new Insets(50));
//背景对象
Background background = new Background(bgf);
// 设置背景颜色
b1.setBackground(background);

设置边框

// 设置边框Paint.valueOf("#87CEEB")
// Paint 颜色
// BorderStrokeStyle 边框描边样式
// CornerRadii 圆角半径
// 边框宽度 BorderWidths
BorderStroke bos = new BorderStroke(Color.RED,BorderStrokeStyle.SOLID,new CornerRadii(10),new BorderWidths(5));
Border border = new Border(bos);
b1.setBorder(border);

使用JavaCSS设置样式

/*常用的FXStyle*/
b2.setStyle("-fx-background-color: #1169EE20;"+ //背景颜色"-fx-background-radius: 5;"+ //背景圆角"-fx-background-insets: 0;"+ //边框到背景的距离"-fx-text-fill: #50ff23;"+ //文本颜色"-fx-font-size: 15;"+ //字体大小"-fx-font-family: 'Segoe Print';"+ //字体"-fx-border-color: #EE1169;"+ //边框颜色"-fx-border-style: SOLID;"+ //边框样式/***BorderStrokeStyle.DOTTED; // 虚线*BorderStrokeStyle.DOTTED;  // 点状*BorderStrokeStyle.NONE; // 无样式*BorderStrokeStyle.SOLID;  //实线*/"-fx-border-radius: 5;"+ //边框圆角"-fx-border-width: 2;" //边框宽度
);

设置按钮单击事件

// 设置按钮单击事件
b1.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent event) {// 获取事件最初发生的对象Button button = (Button)event.getSource();System.out.println(button.getText());System.out.println("按钮b1被点击了.....");}
});

实例代码


```java
public class Main9 extends Application {@Overridepublic void start(Stage primaryStage) throws Exception {// 创建按钮对象Button b1 = new Button();// 设置按钮显示文本b1.setText("这是按钮");// 设置文本字体b1.setFont(Font.font("sans-serif",40));// 设置文字颜色b1.setTextFill(Color.RED);// 设置布局位置b1.setLayoutX(100);b1.setLayoutY(100);// 设置宽高b1.setPrefWidth(400);b1.setPrefHeight(200);// 设置背景图片
//        b1.setBackground(new Background(new BackgroundImage(
//                new Image("ico\\tim.png") , null, null,
//                null, null)));// 设置背景颜色// Paint 颜色// CornerRadii 圆角//Insets 内边距//b1.setBackground(new Background(new BackgroundFill(Color.LIGHTBLUE,new CornerRadii(10),new Insets(5,0,0,0)) ));// 背景填充// Paint 颜色 可以直接用Color.LIGHTBLUE 获取颜色// Paint.valueOf("#87CEEB55")  前六位颜色代码,后两位不透明度// CornerRadii 圆角半径//Insets 内边距BackgroundFill bgf = new BackgroundFill(Paint.valueOf("#87CEEB55"),new CornerRadii(20),new Insets(50));//背景对象Background background = new Background(bgf);// 设置背景颜色b1.setBackground(background);// 设置边框Paint.valueOf("#87CEEB")// Paint 颜色// BorderStrokeStyle 边框描边样式// CornerRadii 圆角半径// 边框宽度 BorderWidthsBorderStroke bos = new BorderStroke(Color.RED,BorderStrokeStyle.SOLID,new CornerRadii(10),new BorderWidths(5));Border border = new Border(bos);b1.setBorder(border);//javafx css 设置样式Button b2 = new Button("b2");// 设置布局位置b2.setLayoutX(100);b2.setLayoutY(300);b2.setPrefWidth(400);b2.setPrefHeight(200);/*常用的FXStyle*/b2.setStyle("-fx-background-color: #1169EE20;"+ //背景颜色"-fx-background-radius: 5;"+ //背景圆角"-fx-background-insets: 0;"+ //边框到背景的距离"-fx-text-fill: #50ff23;"+ //文本颜色"-fx-font-size: 15;"+ //字体大小"-fx-font-family: 'Segoe Print';"+ //字体"-fx-border-color: #EE1169;"+ //边框颜色"-fx-border-style: SOLID;"+ //边框样式/***BorderStrokeStyle.DOTTED; // 虚线*BorderStrokeStyle.DOTTED;  // 点状*BorderStrokeStyle.NONE; // 无样式*BorderStrokeStyle.SOLID;  //实线*/"-fx-border-radius: 5;"+ //边框圆角"-fx-border-width: 2;" //边框宽度);// 设置按钮单击事件b1.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic void handle(ActionEvent event) {// 获取事件最初发生的对象Button button = (Button)event.getSource();System.out.println(button.getText());System.out.println("按钮b1被点击了.....");}});Group root = new Group();root.getChildren().add(b1);root.getChildren().add(b2);Scene scene = new Scene(root);primaryStage.setTitle("javaFX");primaryStage.setHeight(800);primaryStage.setWidth(800);primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args) {launch(args);}
}

9,JavaFX布局(pane)

(1). Pane

Pane是其它布局控件类的父类,我们可以将Pane看成一个绝对布局控件,当我们将某个控件放置在Pane当中的时候,我们需要指定它的位置坐标(layoutX和layoutY)。当我们将一个控件拖拽到Pane中的时候,会自动生成layoutX和layoutY坐标。如图是使用Pane为父容器设计的一个简单界面:

<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?><Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="350.0" prefWidth="500.0" xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1"><children><Button layoutX="318.0" layoutY="210.0" mnemonicParsing="false" text="登录" /><Label layoutX="136.0" layoutY="104.0" text="用户名:" /><Label layoutX="136.0" layoutY="162.0" text="密 码:" /><TextField layoutX="212.0" layoutY="100.0" /><PasswordField layoutX="212.0" layoutY="158.0" /></children>
</Pane>

(2). BorderPane

BorderPane将界面分割上上下左右中5部分

BorderPane pane = new BorderPane();        //首先创建一个BorderPane对象//然后在BorderPane对象的五个区域分别放置五个CustomPane对象,
//CustomPane是自定义面板,是为了方便放置标签。
pane.setTop(new CustomPane("Top")); //放置在上面pane.setRight(new CustomPane("Right"));//放置在右边pane.setBottom(new CustomPane("Bottom"));//放置在上面pane.setLeft(new CustomPane("Left"));//放置在左边pane.setCenter(new CustomPane("Center"));//放置在中间

(3). HBox

HBox是将所有的控件放在同一行,无论有多少个控件都是放在同一行。
HBox可以水平排列控件,不换行。如图:

HBox hBox = new HBox(15);     //首先创建一个HBox对象hBox.setPadding(new Insets(15, 15, 15, 15));hBox.setStyle("-fx-background-color: gold");//然后,在面板上添加六个按钮,代码如下:
hBox.getChildren().add(new Button("one"));hBox.getChildren().add(new Button("two"));hBox.getChildren().add(new Button("three"));hBox.getChildren().add(new Button("four"));hBox.getChildren().add(new Button("five"));hBox.getChildren().add(new Button("six"));

效果

(4). VBox

VBox类似的,垂直排列控件,不换列。如图:

//VBox的布局策略与HBox类似,不过VBox是将所有的控件放在同一列。//首先创建一个VBox对象,代码如下:VBox vBox = new VBox(15);vBox.setPadding(new Insets(15, 5, 5, 5));//然后,在VBox对象中添加六个按钮,代码如下:vBox.getChildren().add(new Button("one"));vBox.getChildren().add(new Button("two"));vBox.getChildren().add(new Button("three"));vBox.getChildren().add(new Button("four"));vBox.getChildren().add(new Button("five"));vBox.getChildren().add(new Button("six"));

(5) FlowPane面板

FlowPane感觉像HBox和VBox的综合体,FlowPane可以设置一个方向水平或者垂直。默认方向为水平,那么放入FlowPane中的控件会先水平排列,如果第一行满了以后进入下一行继续水平排列。垂直方向类似的,先垂直排列,如果第一列满了以后进入第二列继续垂直排列。如图:

//首先创建一个FlowPane对象,代码如下:FlowPane pane = new FlowPane();pane.setPadding(new Insets(11, 12, 13, 14));pane.setHgap(5);//设置控件之间的垂直间隔距离pane.setVgap(5);//设置控件之间的水平间隔距离//创建两个标签对象、两个文本输入框和一个按钮对象,代码如下:Label lbName = new Label("Please input a name:");TextField tfName = new TextField();Label lbPassword = new Label("Please input a password:");TextField tfPassword = new TextField();   Button okbtn = new Button("OK");//将这几个控件添加到面板中,代码如下:pane.getChildren().addAll(lbName,tfName,lbPassword,tfPassword,okbtn);

(6), GridPane面板

它采用的布局策略是:将整个面板划分为若干个格子,每个格子的大小是一样的,每个格子中可以放置一个控件,类似于表格的方式。

GridPane pane = new GridPane();pane.setAlignment(Pos.CENTER);pane.setPadding(new Insets(11.5, 12.5, 13.5, 14.5));pane.setHgap(5.5);pane.setVgap(5.5);向面板中添加六个按钮,代码如下:pane.add(new Button("1"), 0, 0);pane.add(new Button("2"), 1, 0);pane.add(new Button("3"), 0, 1);pane.add(new Button("4"), 1, 1);pane.add(new Button("5"), 0, 2);pane.add(new Button("6"), 1, 2);

add方法的第二个和第三个参数是指定控件摆放的位置,分别表示所在的列和行,0是第一行和第一列。布局效果如下图所示:

用户界面设计例子

package ch14;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.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;public class Login extends Application{public void start(Stage primaryStage) throws Exception {VBox pane = new VBox(20);pane.setAlignment(Pos.CENTER);   //设置对齐HBox pane2 = new HBox(20);pane.setAlignment(Pos.CENTER);   //设置对齐HBox pane3 = new HBox(20);pane.setAlignment(Pos.CENTER);   //设置对齐Text text1 = new Text(50,50,"学生信息管理界面");text1.setFont(Font.font("宋体",FontWeight.BOLD,FontPosture.ITALIC,24));   //设置样式Button Login = new Button("登录");Text text2 = new Text(300,300,"学号");Text text3 = new Text(50,50,"密码");Text text4 = new Text(100,50,"");TextField user = new TextField();PasswordField pwd = new PasswordField();pwd.setAlignment(Pos.CENTER);pane.getChildren().add(text1);pane2.getChildren().add(text2);pane2.getChildren().add(user);pane3.getChildren().add(text3);pane3.getChildren().add(pwd);pane.getChildren().add(pane2);pane.getChildren().add(pane3);pane.getChildren().add(Login);pane.getChildren().add(text4);Scene scene = new Scene(pane,400,400);primaryStage.setTitle("学生信息管理");primaryStage.setScene(scene);    //指定要在此阶段上使用的场景。primaryStage.show();   // 显示窗口};public static void main(String[] args){launch(args);   //启动这个程序  APPlication的方法}}

持续更新中…

JavaFX学习笔记(最全,最详细)相关推荐

  1. git学习笔记(全,附命令大全)

    git学习笔记(全) 注:本文参考自廖雪峰官网 下图来自Git Cheat Sheet侵删 git优点 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上. Git跟踪并管理的是修改 ...

  2. Hive学习笔记【全】

    Hive学习笔记[全] 文章目录 Hive学习笔记[全] 一.Hive简介 1.Hive是什么 2.Hive的架构 3.Hive的数据组织 二.Hive安装 1.环境需求 2.安装Hive 3.启动H ...

  3. 一、css清除浮动方法学习笔记总结(超详细,简单易懂)

    ** css清除浮动方法学习笔记总结(超详细,简单易懂) ** 问题: 上图中,由于container(父级元素)未设置高度,其内部子元素设置了float浮动,导致与container同级(也就是co ...

  4. Linux学习笔记 文件服务Vsftp详细介绍

    Linux学习笔记 文件服务Vsftp详细介绍 知识点: 1.FTP使用TCP连接和TCP端口 2.在进行通信时,FTP需要建立两个TCP连接: 一个用于控制信息,TCP端口号缺省为21 一个用于数据 ...

  5. Oracle中job_type,【学习笔记】Oracle DBMS_SCHEDULER详细介绍与使用案例

    天萃荷净 分享一篇关于Oracle DBMS_SCHEDULER详细介绍与使用案例 1.通过DBMS_SCHEDULER.CREATE_JOB直接创建job SQL> create table ...

  6. 小猫爪:i.MX RT1050学习笔记20-安全启动4-实现HAB签名和HAB加密

    小猫爪:i.MX RT1050学习笔记20-安全启动4-实现HAB签名和HAB加密 1 前言 2 准备工作 2.1 下载Flashloader 2.2 下载CST 2.3 安装OpenSSL 3 实战 ...

  7. 小猫爪:i.MX RT1050学习笔记19-安全启动3-实现HAB签名

    小猫爪:i.MX RT1050学习笔记19-安全启动3-HAB签名 1 前言 2 准备工作 2.1 下载Flashloader 2.2 下载CST 2.3 安装OpenSSL 3 实战操作 3.1 生 ...

  8. sqlalchemy 学习笔记(全)

    https://segmentfault.com/a/1190000006949536 SQLAlchemy是python的一个数据库ORM工具,提供了强大的对象模型间的转换,可以满足绝大多数数据库操 ...

  9. 爬虫学习笔记1(超级详细)

    文章预览: 爬虫学习笔记 1 爬虫概念 2 爬虫作用 3 爬虫的分类 4 爬虫的流程 http协议复习 爬虫特别关注的请求头和响应头 常见的响应状态码 浏览器运行过程 如何查找数据 requests模 ...

  10. openCV4.0 C++ 快速入门30讲学习笔记(自用 代码+注释)详细版

    课程来源:哔哩哔哩 环境:OpenCV4.5.1 + VS2019 目录 002.图像色彩空间转换 003.图像对象的创建与赋值 004.图像像素的读写操作 005.图像像素的算术操作(加减乘除4种不 ...

最新文章

  1. 第二章:1、函数求导
  2. python语言程序设计嵩天-Python语言程序设计基础(第2版)嵩天课后答案
  3. android控制电脑,android-remote-control-computer
  4. IDEA MAVEN Project 显示问题
  5. java未检查异常_Java中已检查和未检查的异常
  6. VirtualBox 扩展虚拟硬盘容量
  7. Linux 基础知识系列第一篇
  8. oracle 数据泵 详解
  9. CCF201803-2 碰撞的小球
  10. JavaScript简介及基础知识(1)
  11. oracle监听程序无法分配,oracleORA-12520:TNS:监听程序无法为请求的服务器类型找到可用的处理程序的问题...
  12. 兔子未来的方向在哪里
  13. 安装程序无法创建新的系统分区也无法定位现有系统分区_不要再给硬盘胡乱分区了,这里有最方便安全的分区方法。...
  14. 2009福州数学建模题目及答案
  15. js 实现2的n次方计算函数_x的10的n次方解决js浮点数计算
  16. IDEA乱码解决合集
  17. 磁盘数据线接触不良的故障排查
  18. [转] 理解Web路由
  19. 60个前端常用的实现方法(邮箱,手机号,url地址)
  20. 编译小度deng wifi源码出错

热门文章

  1. 为西安地铁“让路” 47条公交线路有调整
  2. 什么是staging server
  3. python批量处理视频_Python调用ffmpeg开源视频处理库,批量处理视频
  4. 【嵌入式】STM32/μVision中的报错问题及解决办法
  5. 自定义组件-onFinishInflateonSizeChanged
  6. Keil5,STM32 Printf()编译出错,implicitly declaring library function ‘printf‘ with type‘int (const char *)
  7. c语言指针加括号,C语言数组,指针和方括号赋值和输出产生不同结果?
  8. 软件工程(可行性研究)
  9. shell jq处理json字符串
  10. JS 之 验证电话号码