总结常用的Javafx功能及用法
- 什么是Javafx
- 一个窗口都有哪些内容
- 制作一个简单的窗口
- 一些方法
- Stage
- scene
- Pane
- node(一般node同用的方法,这里用label举例)
- 关闭提示窗口
- 多窗口的跳转
- 有关Color设置的三种方式
- 有关Font设置字体、字重、大小
- 有关Image加载图片
什么是Javafx
JavaFX是一个java语言图形界面开发工具包,加上布局和java逻辑可以制作出可视化的窗口
加粗样式放在前面的JavaFX 在线API
一个窗口都有哪些内容
一个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:将页面分成上下左右中五部分
BorderPane borderPane = new BorderPane();
ToolBar toolbar = new ToolBar();
borderPane.setTop(toolbar);
//borderPane.setCenter(toolbar);
//borderPane.setBottom(toolbar);
----AnchorPane:以偏移量或坐标轴去设定节点位置
//创建一个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、颜色
//可以在setStyle方法中 定义node的背景颜色,边框颜色,边框大小等
label.setStyle("-fx-background-color: red;-fx-border-color: blue;-fx-border-width: 3px");
3、宽高
给label设置颜色后发现 文字其实被包裹在边框中的,这个时候我们可以调节它的宽高,和文字处于边框的位置
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、透明度
label.setOpacity(0.5);
5、旋转
//以label的中点为坐标轴顺时针旋转70度
label.setRotate(70);
6、平行垂直移动
//横向平移
label.setTranslateX(10);
//纵向平移
label.setTranslateY(10);
关闭提示窗口
//关掉平台界面设置默认的关闭方法
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
//页面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);