当前位置: 首页 > 知识库问答 >
问题:

在下面的代码中,在文本字段的整数和双倍值之间做计算数时,如何应用双向方法?

云景焕
2023-03-14
    StringConverter<Number> converter = new NumberStringConverter();
    StringConverter<Double> toDouble = new DoubleStringConverter();
    
    TextFormatter<Number> quantity = new TextFormatter<>(converter);
    TextFormatter<Double> price = new TextFormatter<>(toDouble);
    TextFormatter<Double> total = new TextFormatter<>(toDouble);

    Quantity.setTextFormatter(quantity);
    Price.setTextFormatter(price);
    Total.setTextFormatter(total);
    
    total.valueProperty().bindBidirectional(Bindings.createObjectBinding(() -> {
        
        // ?????????????????????????????????????????
        
    }, quantity.valueProperty(), price.valueProperty()));
    

请帮助填写计算或任何其他方法来触发更改,每当我输入不同的数字的文本字段?

共有1个答案

公西翼
2023-03-14

由于表示总计的文本字段不可编辑,因此这里不需要双向绑定,只需要在计算值更改时更新一个值(总计的值)的常规绑定。

你可以做一些类似的事情

total.valueProperty().bind(Bindings.createObjectBinding(
    () -> quantity.getValue() * price.getValue(),
    quantity.valueProperty(), price.valueProperty()));

bindings.createxxxbinding(...)方法创建可观察的值,这些值是计算出来的(这里基本上是通过公式quantity*price)。绑定表达了这样一个事实,即当计算值更改时,total的值应该更改。双向绑定表达了这样一种思想,即当两个值中的任一个发生变化时,应将另一个设置为与之匹配。这在这种情况下根本行不通,因为您无法设置计算值。

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.util.converter.DoubleStringConverter;
import javafx.util.converter.IntegerStringConverter;


public class App extends Application {

    @Override
    public void start(Stage stage) {
        
        TextFormatter<Integer> quantity = new TextFormatter<>(new IntegerStringConverter(), 0);
        TextFormatter<Double> price = new TextFormatter<>(new DoubleStringConverter(), 0.0);
        TextFormatter<Double> total = new TextFormatter<>(new DoubleStringConverter(), 0.0);
        
        
        
        total.valueProperty().bind(Bindings.createObjectBinding(
                () -> quantity.getValue() * price.getValue(), 
                quantity.valueProperty(), price.valueProperty()));
        
        TextField quantityTF = new TextField("0");
        quantityTF.setTextFormatter(quantity);
        
        TextField priceTF = new TextField("0.0");
        priceTF.setTextFormatter(price);
        TextField totalTF = new TextField();
        totalTF.setEditable(false);
        totalTF.setTextFormatter(total);
        
        
        GridPane root = new GridPane();
        ColumnConstraints leftCol = new ColumnConstraints();
        leftCol.setHalignment(HPos.RIGHT);
        ColumnConstraints rightCol = new ColumnConstraints();
        rightCol.setHalignment(HPos.LEFT);
        root.getColumnConstraints().setAll(
                leftCol, rightCol
        );
        root.setAlignment(Pos.CENTER);
        root.setPadding(new Insets(5));
        root.setHgap(5);
        root.setVgap(5);
        root.addRow(0, new Label("Price:"), priceTF);
        root.addRow(1, new Label("Quantity:"), quantityTF);
        root.addRow(2, new Label("Total:"), totalTF);
        
        stage.setScene(new Scene(root, 800, 500));
        stage.show();
    }

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

}
 类似资料:
  • 我有一个jUnit测试断言两个双重对象与以下: 这很好,然后我决定将其改为使用原语double,结果发现它已被弃用,除非还提供了delta。 所以我想知道的是,在这个assertEquals中使用双对象或原语类型有什么区别?为什么使用没有增量的对象是可以的,但是使用没有增量的原语是不可取的?Java是否在后台做了一些已经考虑了默认增量值的事情? 谢谢

  • 问题内容: 对于单个项目,我想知道在滚动时间内更改的代码行数。 我们正在使用Jenkins和Java,并且我正在寻找某种Jenkins插件或报告,以根据需要提供报告。 目的是确定发现的错误与更改的代码行数之间是否存在关系,更重要的是,要在不同项目之间进行此比较。 问题答案: 我不确定我是否正确理解您的问题,但这是一个主意: 编写一个脚本,该脚本将列出SCM检出中的更改并创建一个文件。添加构建步骤以

  • 如果我创建一个简单的拓扑,其中有一个源和一个处理器,那么在控制台中得到的StreamThread将是预期的两倍。 例如,如果我将线程设置为一个,并且有一个分区,我会看到2个流线程。如果我设置为20个线程,并且有20个分区,我会看到40个流线程。 调用stream.start()之后,我看到这20个线程从CREATED转换到Running。 其他20个线程只是在初始化的后期才被创建。看起来Strea

  • 你能帮我在这段代码中添加一个额外的检查吗?这个检查可以帮助我找出每一段的字数? BufferedReader br=新的BufferedReader(新的InputStreamReader(新的FileInputStream(path))); }爪哇

  • 我有一个关于浮点数的机器ε的天真问题。 我们知道,双浮点数的机器ε约为10^-16,而浮点数的最小严格正值可以小到10^{-300}。既然机器ε是相对误差的上限,那么使用这个比机器ε小得多的数字10^{-300}有什么意义呢? 我一定是误解了浮点表示。你能澄清一下吗?

  • 我有以下问题。我有一个函数在python中使用Numpy函数定义。函数平滑,可积于正实。我想构造函数的双反导数(假设0处的反导数的值和斜率都是0),这样我就可以在任何小于100的正实数上计算它。 在的反导数定义: at的双重反导数的定义: 的实际形式并不重要,所以为了方便起见,我将使用一个简单的。但是请注意,即使我的例子有一个已知的封闭形式,我的实际函数却没有。 我的解决方案是使用简单的数值积分将