JavaFx基础使用

2 篇文章 0 订阅

一、基础使用

1、基础框架

新建一个类,继承 javafx.application.Application ,重写start(Stage stage) 方法,init和stop方法可选重写,然后使用main 方法执行 launch() 方法即可。

public class testApplication extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        //设置标题
        stage.setTitle("Hello!");
        //显示窗口
        stage.show();
    }
    @Override
    public void init() throws Exception {
        System.out.println("初始化方法");
        super.init();
    }
    @Override
    public void stop() throws Exception {
        System.out.println("结束方法");
        super.stop();
    }
    public static void main(String[] args) {
        launch();
    }
}

2、为窗口里面添加内容

public void start(Stage stage) throws IOException {
    //标签
    Label label = new Label("Hello World?");
    //布局
    BorderPane pane = new BorderPane(label);
    //场景
    Scene scene = new Scene(pane,300,300);
    //将场景设置到窗口里
    stage.setScene(scene);
    //设置标题
    stage.setTitle("Hello!");
    //显示窗口
    stage.show();
}

3、打开新的窗口

button1.setOnAction(e->{
    Stage stage1 = new Stage();
    AnchorPane root  = new AnchorPane();
    root.getChildren().add(new Label("测试"));
    Scene scene = new Scene(root,200,200);
    stage1.setScene(scene);
    stage1.setTitle("窗口1");
    stage1.initOwner(stage);
    stage1.initModality(Modality.WINDOW_MODAL);
    stage1.show();
});

二、参数详解

1、State详解

对应的是窗口,主要方法有:

//常用
stage.setTitle("标题");
stage.getIcons().add(new Image("images\\papa.jpg"));//设置左上角和系统状态栏显示图标
stage.setResizable(false);//设置不可以拖动改变窗口大小,默认为true,但是最小化和关闭按钮正常

//窗口样式,分5种
stage.initStyle(StageStyle.DECORATED);//默认
stage.initStyle(StageStyle.TRANSPARENT);//无上边标题栏,包括图标、标题、最小最大关闭按钮
stage.initStyle(StageStyle.UNDECORATED);//效果和TRANSPARENT一致
stage.initStyle(StageStyle.UNIFIED);//和DECORATED一致
stage.initStyle(StageStyle.UTILITY);//标题栏只有标题和关闭按钮,同时不在状态栏显示图标

//是否模态窗口,主要是主窗口点击按钮后弹出的弹窗的状态
stage.initModality(Modality.NONE);//非模态话窗口,点击同个按钮可以打开多个弹窗,弹窗与主窗口无不干扰
stage.initModality(Modality.APPLICATION_MODAL);//当前弹窗弹出时,本应用其他窗口全部禁用
stage1.initModality(Modality.WINDOW_MODAL);//点击按钮时设置stage1.initOwner(stage);设置父窗口为主窗口,那么,之前点击打开的弹窗可用,但父窗口不可用

//设置关闭时先提示是否退出程序,确认之后才会关闭程序
Platform.setImplicitExit(false);//取消操作系统默认退出动作,具体表现就是,点击窗口关闭按钮,窗口关闭,但是程序仍在运行
stage.setOnCloseRequest(e->{
    e.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();//关闭窗口及程序
        //stage.close();//仅仅关闭窗口,程序未退出
    }
});

2、布局

//布局,分三种
Pane pane = new Pane();//元素需要使用button.setLayoutX(200);button.setLayoutY(150);定位位置
BorderPane = new BorderPane();//四个方向布局,一个元素时,默认居中
AnchorPane = new AnchorPane();//同Pane

3、Node UI 控件的通用属性

所有的控件,如Button、Label都是继承Node类,所以,大体都具有类似的一些通用常用属性。

1)设置样式

//类似于CSS的样式,区别是在样式前面加上"-fx-"
label.setStyle("-fx-background-color: red;-fx-border-color: blue;-fx-border-width: 3px;");

2)设置其他常用属性

label.setLayoutX(200);//设置X坐标
label.setLayoutY(150);//设置Y坐标
label.setPrefHeight(50);//高
label.setPrefWidth(100);//宽
label.setAlignment(Pos.CENTER);//文本对齐方式
label.setVisible(false);//隐藏
label.setOpacity(0.5);//设置透明度
label.setRotate(25);//设置旋转角度
label.setTranslateX(60);//横向移动60
label.setTranslateY(100);//纵向移动100
label.getScene();//获取放置label的场景
label.getParent();//获取父节点

4、控件的属性绑定和属性监听

所有控件的属性,都是继承自Property接口类

1)监听场景宽高,动态改变圆的中心轴

circle.centerXProperty().bind(scene.widthProperty().divide(2));
circle.centerYProperty().bind(scene.heightProperty().divide(2));

2)监听圆中心轴变动

circle.centerXProperty().addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
        System.out.println("x轴中心的改变了,原来是:"+number+",现在是:"+t1);
    }
});

三、小场景

1、使用默认浏览器打开网页

//按钮
Button button = new Button("打开百度网页");
button.setOnAction(e->{
    //使用系统默认浏览器打开网页
    getHostServices().showDocument("www.baidu.com");
});

2、点击按钮切换场景

button1.setOnAction(e->{
    stage.setScene(scene1);
});
button2.setOnAction(e->{
    stage.setScene(scene2);
});

3、修改鼠标图片,如在画图软件将鼠标替换成画笔

scene.setCursor(new ImageCursor(new Image("images\\papa.jpg")));

四、B站参考资源

LeeWyatt写的组件: LeeWyatt (leewyatt) - Gitee.com

api文档: https://www.javatpoint.com/javafx-tutorial

推荐入门教程: B站Aimls老师的视频,挑重点,先看布局和组件

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值