JavaFX Property及监听、计算、组合

64 篇文章 12 订阅

JavaFX可通过Property监听,做出自己的操作,在图形的Property监听中应用较多。

// Double监听
方式一(可知详细变化):
        DoubleProperty doubleProperty = new SimpleDoubleProperty(初始化的double值);
        doubleProperty.addListener(this::doublePropertyChange);
        private void doublePropertyChange(ObservableValue<? extends Number>                                     observable, Number oldValue, Number newValue){
        double value = (double)newValue;
        }
        // 坑 最小值变化不触发改变的监听事件
        doubleProperty.set(doubleProperty.get() + Double.MIN_VALUE); 
方式二(可知详细变化):
doubleProperty.addListener(new ChangeListener<Number>() {
    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
    //操作
    }
});
可简化为
doubleProperty.addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> {
	double value = (double)newValue;
});
方式三(可知变化了):		
ReadOnlyDoubleWrapper doubleProperty = new ReadOnlyDoubleWrapper(初始化的double值);
doubleProperty.getReadOnlyProperty().addListener(o -> doSomething());
private void doSomething(){
		
}

图形的属性可绑定一个Property,在Property变化时,属性也跟着变化,可广泛应用于动画。

Button myButton = new Button();
myButton.setText("Test");
SimpleDoubleProperty simpleDoubleProperty = new SimpleDoubleProperty(100);
myButton.translateXProperty().bind(simpleDoubleProperty);
simpleDoubleProperty.set(0);
// 想通过setTranslateX方式改变translateX属性,必须解绑
myButton.unbind();
myButton.setTranslateX(50);

Property可以进行计算,元素的改动会同步到计算结果中,同时字符串也可以和数值联合:

        SimpleDoubleProperty simpleDoubleProperty = new SimpleDoubleProperty(10);
        SimpleDoubleProperty simpleDoubleProperty1 = new SimpleDoubleProperty(10);
        SimpleDoubleProperty simpleDoubleProperty2 = new SimpleDoubleProperty(10);
        DoubleBinding doubleBinding = simpleDoubleProperty2.add(simpleDoubleProperty).add(simpleDoubleProperty1);
        System.out.println(doubleBinding.getValue());
        simpleDoubleProperty2.set(0);
        System.out.println(doubleBinding.getValue());
        System.out.println(new SimpleStringProperty("P:").concat(doubleBinding.asString()).getValue());

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
JavaFX的下拉框(ComboBox)监听事件可以通过添加一个ChangeListener来实现。 可以按照以下步骤来添加一个下拉框监听事件: 1. 获取ComboBox对象 ```java ComboBox comboBox = new ComboBox(); ``` 2. 添加ChangeListener ```java comboBox.valueProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { // 处理事件 System.out.println("Selected item: " + newValue); } }); ``` 在ChangeListener的changed方法中,可以处理下拉框值改变的事件。其中,observable是一个ObservableValue对象,它包含了下拉框的当前值,oldValue是下拉框改变前的值,newValue是下拉框改变后的值。 比如上述代码中,输出了下拉框选中的值。 完整示例代码: ```java import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Scene; import javafx.scene.control.ComboBox; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class ComboBoxDemo extends Application { @Override public void start(Stage primaryStage) throws Exception { ComboBox<String> comboBox = new ComboBox<>(); comboBox.getItems().addAll("Option 1", "Option 2", "Option 3"); comboBox.valueProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { System.out.println("Selected item: " + newValue); } }); StackPane root = new StackPane(comboBox); Scene scene = new Scene(root, 300, 200); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风铃峰顶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值