总结常用的Javafx功能及用法

  • 什么是Javafx
  • 一个窗口都有哪些内容
  • 制作一个简单的窗口
  • 一些方法
  • Stage
  • scene
  • Pane
  • node(一般node同用的方法,这里用label举例)
  • 关闭提示窗口
  • 多窗口的跳转
  • 有关Color设置的三种方式
  • 有关Font设置字体、字重、大小
  • 有关Image加载图片


什么是Javafx

JavaFX是一个java语言图形界面开发工具包,加上布局和java逻辑可以制作出可视化的窗口

加粗样式放在前面的JavaFX 在线API

https://docs.oracle.com/javase/8/javafx/api/toc.htm

一个窗口都有哪些内容

JAVAfx介绍 javafx使用_开发语言


一个Javafx程序包括:

stage,scene,pane(布局),node(label,button,image。。。)

彼此之间是包含关系。

一个pane可以包含多个node

制作一个简单的窗口

创建一个javaFX程序,继承Application类,重写它的start方法(逻辑在这里),执行时在main方法中调用launch方法从而会调用start
注意导包的时候,button是javafx下的,不要导错包

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

public class HelloJavaFX extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        //创建一个node,并设置好它的位置
        Button button = new Button("你好,世界");
        button.setLayoutX(200);
        button.setLayoutY(200);
        
        //创建一个布局,把button放进布局里
        AnchorPane root = new AnchorPane();
        root.getChildren().addAll(button);

        //创建一个场景,场景中要有布局,宽高是可选项
        Scene scene = new Scene(root,500,500);

        //对stage进行设置,将场景放进stage,设置标题,程序图标,以及最终展示出来
        stage.setScene(scene);
        stage.setTitle("JavaFX");
        stage.getIcons().add(new Image("1.jpg"));
        stage.show();
    }
}

一些方法

Stage

1、设置图标

stage.getIcons().add(new Image("图片路径"));

2、设置标题

stage.setTitle("标题");

3、接收场景

stage.setScene(scene);

4、窗口大小是否可调整

//窗口大小默认是可调整的,如果想固定大小不可调整,参数填false
stage.setResizable(false);

5、窗口样式

stage.initStyle(StageStyle.DECORATED);
//StageStyle.DECORATED	默认情况,有白色背景和装饰
//StageStyle.TRANSPARENT	透明背景,没有装饰(没有标题,最大最小化和关闭按钮,不可调整大小)
//StageStyle.UNDECORATED	白色背景,没有装饰(没有标题,最大最小化和关闭按钮,不可调整大小)
//StageStyle.UTILITY	白色背景,实用窗口(没有标题,固定大小不能最大化小化)

scene

1、接收布局

//创建一个场景,场景中要有布局,宽高是可选项
Scene scene = new Scene(布局,500,500);

2、设置鼠标图片

scene.setCursor(new ImageCursor(new Image("2.jpeg")));

Pane

常用的布局:

----BorderPane:将页面分成上下左右中五部分

JAVAfx介绍 javafx使用_java_02

BorderPane borderPane = new BorderPane();
ToolBar toolbar = new ToolBar();
borderPane.setTop(toolbar);
//borderPane.setCenter(toolbar);
//borderPane.setBottom(toolbar);

----AnchorPane:以偏移量或坐标轴去设定节点位置

JAVAfx介绍 javafx使用_开发语言_03

//创建一个node,并设置好它的位置
        Button button = new Button("你好,世界");
        //创建一个布局,把button放进布局里
        AnchorPane root = new AnchorPane();
        //这里将button设置离布局上边缘200,距离布局左边缘100的位置
        //相当于直接对button进行坐标设置
        //button.setLayoutX(100);
		//button.setLayoutY(200);
        AnchorPane.setTopAnchor(button,200.0);
        AnchorPane.setLeftAnchor(button,100.0);
        //AnchorPane.setRightAnchor(button, 10.0);
        //AnchorPane.setBottomAnchor(button,100.0);
        root.getChildren().addAll(button);

node(一般node同用的方法,这里用label举例)

1、坐标

Label label = new Label("你要开心呀~");
label.setLayoutX(100);
label.setLayoutY(200);

2、颜色

JAVAfx介绍 javafx使用_ci_04

//可以在setStyle方法中 定义node的背景颜色,边框颜色,边框大小等
label.setStyle("-fx-background-color: red;-fx-border-color: blue;-fx-border-width: 3px");

3、宽高
给label设置颜色后发现 文字其实被包裹在边框中的,这个时候我们可以调节它的宽高,和文字处于边框的位置

JAVAfx介绍 javafx使用_ci_05

label.setStyle("-fx-background-color: red;-fx-border-color: blue;-fx-border-width: 3px");
label.setPrefWidth(200);
label.setPrefHeight(50);
label.setAlignment(Pos.CENTER);//CENTER_LEFT,CENTER_RIGHT
//label.setAlignment(Pos.BOTTOM_LEFT);
//label.setAlignment(Pos.TOP_RIGHT);

4、透明度

JAVAfx介绍 javafx使用_JAVAfx介绍_06

label.setOpacity(0.5);

5、旋转

JAVAfx介绍 javafx使用_JAVAfx介绍_07

//以label的中点为坐标轴顺时针旋转70度
label.setRotate(70);

6、平行垂直移动

//横向平移
label.setTranslateX(10);
//纵向平移
label.setTranslateY(10);

关闭提示窗口

JAVAfx介绍 javafx使用_Image_08

//关掉平台界面设置默认的关闭方法
Platform.setImplicitExit(false);
//给stage设置一个关闭动作的响应
//利用lamda表达式,让event去消费这个请求
stage.setOnCloseRequest(event ->{
	event.consume();
	//创建一个提示响应窗口
	Alert alert = new Alert (Alert.AlertType.CONFIRMATION);//确认窗口
	//Alert alert = new Alert (Alert.AlertType.ERROR);	错误提示窗口
	//Alert alert = new Alert (Alert.AlertType.INFORMATION);	通知窗口
	//Alert alert = new Alert (Alert.AlertType.WARNING);	警告窗口
	alert.setTitle("退出");
	alert.setContentText("您确定要退出吗?");
	alert.setHeaderText(null);
	//ButtonType类用于指定应在对话框中向用户显示哪些按钮
	//如果用户点击确定关闭,则让平台界面关闭程序
	Optional<ButtonType> result = alert.showAndWait();
	if(result.get()==ButtonType.OK){
		Platform.exit();
	}
})

多窗口的跳转

多窗口的跳转是通过将不同的scene放在stage中,也就是要针对不同的button设置点击事件,在事件中更改stage的scene

JAVAfx介绍 javafx使用_JAVAfx介绍_09

//页面1
		Label label = new Label("你好呀,今天过的怎么样?");
        label.setLayoutX(70);
        label.setLayoutY(50);
        Button b1 = new Button("button1");
        b1.setLayoutX(90);
        b1.setLayoutY(100);

		//在布局中添加好 并放在scene中
        AnchorPane root = new AnchorPane();
        root.getChildren().addAll(label,b1);
        Scene scene = new Scene(root,270,470);

        //页面2
        Label l1 = new Label("要记得一直开心哦~");
        l1.setLayoutX(80);
        l1.setLayoutY(50);
        Button b2 = new Button("button2");
        b2.setLayoutX(95);
        b2.setLayoutY(100);
        
        AnchorPane root1 = new AnchorPane();
        root1.getChildren().addAll(l1,b2);
        Scene scene1 = new Scene(root1,270,470);


        //点击事件的页面跳转
        b1.setOnAction(event -> {
            primaryStage.setScene(scene1);
        });
        b2.setOnAction(event -> {
            primaryStage.setScene(scene);
        });

有关Color设置的三种方式

//创建一个圆,并设置坐标及半径
        Circle circle = new Circle();
        circle.setCenterX(250);
        circle.setCenterY(250);
        circle.setRadius(100);

        //使用rgb参数设置颜色
        circle.setFill(Color.rgb(255,0,0));
        //吸取的色块色值
        circle.setFill(Color.web("#f66a08"));
        //直接调用颜色的静态常量
        circle.setFill(Color.PURPLE);

有关Font设置字体、字重、大小

Label label = new Label("你好,世界");
label.setLayoutX(150);
label.setLayoutY(200);
//font有不同的重载方法 直接放double 设置字体大小
label.setFont(new Font(30));
//放字符串和double  是windows系统里有的字体名字和字体大小
label.setFont(Font.font("汉仪综艺体简",50));
//放字符串 ,字重(加粗,斜体)  和 字体大小
label.setFont(Font.font("汉仪综艺体简", FontWeight.BOLD,70));
//如果系统没有这个字体,需要找到这个字体文件的路径,使用loadfont.file下的绝对路径绝对路径!!!
label.setFont(Font.loadFont("file:D:\\Pro\\WorkSpace\\IdeaProjects\\Lesson\\src\\com\\yu\\abc\\ColorFontImage\\HYZYTJ.ttf",90));
//磁盘目录或者项目根目录开始
//file:src/com/yu/abc/ColorFontImage/HYZYTJ.ttf
//file:D:\Pro\WorkSpace\IdeaProjects\Lesson\src\com\yu\abc\ColorFontImage\HYZYTJ.ttf

有关Image加载图片

image图片需要放在imageView里面展示

ImageView imageView = new ImageView();
Image image = new Image("4.png");//这个路径是从src开始的
imageView.setImage(image);