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()));
请帮助填写计算或任何其他方法来触发更改,每当我输入不同的数字的文本字段?
由于表示总计的文本字段不可编辑,因此这里不需要双向绑定,只需要在计算值更改时更新一个值(总计的值)的常规绑定。
你可以做一些类似的事情
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的双重反导数的定义: 的实际形式并不重要,所以为了方便起见,我将使用一个简单的。但是请注意,即使我的例子有一个已知的封闭形式,我的实际函数却没有。 我的解决方案是使用简单的数值积分将