总结常用的Javafx功能及用法(下)

本文详细介绍了JavaFX的控件绑定和监听,包括如何让控件与页面大小绑定,事件驱动编程的原理,如点击移动事件和拖拽移动文件的实现。此外,还探讨了FXML布局、Scene Builder的使用,以及Controller的Initialize方法。最后,讨论了JavaFX中的多线程问题,强调了必须在主线程中更新UI的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控件的绑定和监听

在主线程
这里是让控件(Lable,Circle…)和页面大小做一个绑定
1.创建一个圆

		Circle circle = new Circle();
        circle.setCenterX(250);
        circle.setCenterY(250);
        circle.setRadius(100);
        circle.setStroke(Color.BLACK);
        circle.setFill(Color.WHITE);

2.坐标绑定
让圆一直显示在页面中间,也就是让圆的中心坐标属性和scence的长宽做一个绑定

//让圆的中心坐标等于scene长度和宽度的一半
circle.centerXProperty().bind(scene.widthProperty().divide(2));
circle.centerYProperty().bind(scene.heightProperty().divide(2));

当我们缩小界面的时候,可以保证圆始终在页面的正中间
在这里插入图片描述
3.监听器
我们也可以尝试用监听器对stage进行监听,每当页面大小被更改,则内部对圆的坐标进行更改,完成同样的效果。

		//对窗口的宽度属性加上一个监听器
		//添加一个ChangeListener,每当ObservalEvalue的值发生变化时,就会通知它。
		stage.widthProperty().addListener(new ChangeListener<Number>() {
   
            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
   
       			//一旦窗口变化,这里做一个输出
                System.out.println("窗口宽度发生变化"+newValue);
                circle.setCenterX((Double) newValue/2);
            }
        });
        //对窗口高度属性加上监听器
		stage.heightProperty().addListener(new ChangeListener<Number>() {
   
            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
   
                circle.setCenterY((Double) newValue/2);
            }
        });

事件驱动编程

什么是事件驱动

点击一个按键,点击鼠标,拖拽鼠标,点击按钮,电脑执行了(#¥……@#¥)操作,这样一个过程叫事件驱动。

创建一个点击移动事件

这里举例点击按钮,让label实现向下移动20
1.创建Label和Button

		Label label = new Label("hello world");
        Button button = new Button("移动label");
        label.setLayoutX(200);
        label.setLayoutY(50);
        button.setLayoutX(200);
        button.setLayoutY(250);

2.添加场景布局

		AnchorPane root = new AnchorPane();
        root.getChildren().addAll(label,button);
        Scene scene = new Scene(root,500,500);
        stage.setTitle("移动事件");
        stage.getIcons().add(new Image("com/yu/abc/1.jpg"));
        stage.setScene(scene);
        stage.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值