JavaFx的属性、集合绑定事件(十一)

35 篇文章 51 订阅

JavaFx的属性、集合绑定事件(十一)

JavaFx从入门到入土系列
JavaFX属性存储控件的内部状态,并允许我们监听来自变量的状态更改。JavaFX属性可以彼此绑定。绑定行为允许属性根据来自另一个属性的更改值来同步其值。

相互绑定可根据下面的思路去实现

监听基本类型

变动监听 还有 SimpleStringProperty、SimpleObjectProperty 等等基本类型

public class Test04 extends Application {

    private Integer num = 1;

    @Override
    public void start(Stage stage) throws Exception {
        Label label = new Label("hello world!");
        Scene scene = new Scene(label);
        stage.setScene(scene);
        stage.setWidth(400);
        stage.setHeight(400);
        stage.setTitle("师姐,你好!");
        stage.show();

        // 变动监听 还有 SimpleStringProperty、SimpleObjectProperty 等等基本类型
        SimpleIntegerProperty property = new SimpleIntegerProperty(0); // 初始值为0
        property.addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
                System.out.println("变量改变了:" + observableValue);
                // 在此可以更新主线程UI
                label.setText(observableValue.getValue().toString());
            }
        });

        // 添加一个点击事件改变变量值
        label.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                num++;
                property.set(num);
            }
        });
    }

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

这里你是不是想到了异步请求时,用于监听某个变量的变化来达到监听异步请求结果的事件呢?实际上这样也是行得通的。毕竟异步更新UI的方式有很多。

集合绑定

javaFx提供了集合绑定的,下面举例list和map

List

        // list 监听
        ObservableList<Integer> list = FXCollections.observableArrayList(new ArrayList<>());//初始值为空数组 ArrayList
        list.addListener(new ListChangeListener<Integer>() {
            @Override
            public void onChanged(Change<? extends Integer> change) {
                // 在此可以更新主线程UI
                label.setText(change.toString());
                System.out.println(list.toString());
            }
        });

        // 添加一个点击事件改变变量值
        label.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                num++;
                list.add(num);
            }
        });

效果如下:
在这里插入图片描述

Map

		ObservableMap<String,Integer> mapObservable=FXCollections.observableMap(new HashMap<>());
        mapObservable.addListener(new MapChangeListener<String, Integer>() {
            @Override
            public void onChanged(Change<? extends String, ? extends Integer> change) {
                // 在此可以更新主线程UI
                label.setText(change.toString());
                System.out.println(mapObservable.toString());
            }
        });

        // 添加一个点击事件改变变量值
        label.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent mouseEvent) {
                num++;
                mapObservable.put("key_"+num,num);
            }
        });

效果如下:
在这里插入图片描述

其他变量

还有很多类型的监听,这里不一一举例,下面是哪些类型的源码截图
基本:
在这里插入图片描述

集合:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌康ACG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值