首页 > 其他分享 >如何绑定Property以实现控件属性同步

如何绑定Property以实现控件属性同步

时间:2023-06-01 10:12:38浏览次数:39  
标签:控件 绑定 javafx label propertiesFoo new import Property

如何绑定Property以实现控件属性同步

控件的属性往往是各种 Property ,比如 StringProperty, IntegerProperty 。它们有着特殊的性质:

  • 可以在其上添加一个监听函数,在属性发生变化时自动调用
  • 可以绑定另一个 Property ,从而同步变更

效果展示

image

示例代码

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

class PropertiesFoo
{
    public String getValue() {
        return value.get();
    }

    public StringProperty valueProperty() {
        return value;
    }

    public void setValue(String value) {
        this.value.set(value);
    }

    private StringProperty value = new SimpleStringProperty();
}

public class PropertiesExample extends Application
{
    @Override
    public void start(Stage window) throws Exception
    {
        VBox vBox = new VBox();
        vBox.setPadding(new Insets(10));
        vBox.setSpacing(10);

        TextField textField = new TextField();
        Label label = new Label();
        label.textProperty().bind(textField.textProperty());
        
        PropertiesFoo propertiesFoo = new PropertiesFoo();
        propertiesFoo.valueProperty().addListener(( v, oldValue, newValue ) -> {
            System.out.println(String.format("propertiesFoo's value changed: %s -> %s", oldValue, propertiesFoo.getValue()));
        } );
        propertiesFoo.valueProperty().bind(label.textProperty());
        
        vBox.getChildren().addAll(textField, label);

        Scene scene = new Scene(vBox, 400, 300);

        window.setScene(scene);
        window.setTitle(this.getClass().getSimpleName());
        window.show();
    }

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

代码说明

这段代码我们定义了一个自定义的类 PropertiesFoo ,它管理着一个数据成员 StringProperty 。

通过调用 propertiesFoo.valueProperty().addListener 为其添加了变化监听函数,当其数据发生变化时被调用。

通过调用 propertiesFoo.valueProperty().bind 将其内容绑定到 label 的 Property ,从而当 label 内容变化时,propertiesFoo 也跟着变化。

而 label 又绑定到了 textField ,因此当 textField 内容发生改变时,label 也会跟着改变。

总结

通过绑定 Property 可以实现控件属性的同步。

标签:控件,绑定,javafx,label,propertiesFoo,new,import,Property
From: https://www.cnblogs.com/javafx-howto/p/17448138.html

相关文章

  • 界面控件DevExpress ASP.NET新主题——Office 365暗黑主题的应用
    DevExpressASP.NET WebFormsControls拥有针对Web表单(包括报表)的110+种UI控件,DevExpressASP.NETMVCExtensions是服务器端MVC扩展或客户端控件,由轻量级JavaScript小部件提供支持的70+个高性能DevExpressASP.NETCoreControls,包含功能完善的报表平台。在之前发布的v22.1版......
  • Vue2实现双向数据绑定原理
    Vue2.x采用数据劫持结合发布订阅模式(PubSub模式)的方式,通过Object.defineProperty来劫持各个属性的setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。当把一个普通Javascript对象传给Vue实例来作为它的data选项时,Vue将遍历它的属性,用Object.defineProp......
  • 常见控件交互方法
    点击方法element.click()输入操作element.send_keys('appium')设置元素的值element.set_value('appium')清除操作element.clear()是否可见element.is_displayed()返回True/False是否可用element.is_enabled()返回True/False是否被选中element.is_selected()返回True/Fal......
  • 手机直播源码,android 轮播图(自定义组合控件)
    手机直播源码,android轮播图(自定义组合控件)1.项目gradle添加一下配置:  allprojects{ repositories{ ... maven{url'https://jitpack.io'} } } ​2.module中的gradle添加依赖:  dependencies{   implementation'com.github.truemi:SlideS......
  • Vue computed property values was assigned to but it has no setter
    vue文件中的核心代码写法<template><div><v-select:items="filters"label="查询条件"solodenseclass="select-size"v-model="filterKey"clearable></v-sele......
  • 序列化Java对象重命名字段,@JSONField、@JsonProperty、@SerializedName
    @JSONField主要用于返回出参转换这个注解分别可以注解在实体类的属性、setter和getter方法上publicclassTest{/*注解在属性上的时候可以设置一些序列化、格式化的属性@JSONField(serialize=false)---->序列化的时候忽略这个属性@JSO......
  • vue中v-bind使用三目运算符绑定class
    <template><div><!--外边框的样式--><div:class="projectStatus===2?outlineDelay:outline"@click="clickProject(userProjectId)"><!--延期--><divv-if="projectStatus===2"......
  • 对象.hasOwnProperty()的应用
     ......
  • 记录一次ScrollViewer控件 经过大量文本数据卡顿的原因
     在WPF中,CanContentScroll是ScrollViewer控件的一个附加属性,它控制滚动视图中的内容是否按项或像素来滚动。当CanContentScroll设置为false时,表示ScrollViewer控件使用逐像素的滚动方式,这意味着滚动视图中的内容会以像素为单位进行滚动。在这种情况下,如果您需要展示......
  • 直播app源码,常用控件:进度指示器
    直播app源码,常用控件:进度指示器LinearProgressIndicator是一个线性、条状的进度条 LinearProgressIndicator({ //value表示当前的进度,取值范围为[0,1];如果value为null时则指示器会执行一个循环动画(模糊进度);当value不为null时,指示器为一个具体进度的进度条。 doublevalue......