【发布时间】:2016-04-05 10:13:36
【问题描述】:
一般问题:当一个简单整数的值发生变化时,有没有办法更新标签?
我说的是简单的 int,而不是像 ReadOnlyIntegerWrappers 这样的东西。我根据Converting Integer to ObservableValue<Integer> in javafx尝试了以下方法 (我不得不将 ObservableValue 的标识符(它叫什么?)从 Integer 更改为 String,因为我找不到将它绑定到 TextProperty 的方法)
我在下面包含了我的演示代码,它似乎在label.textProperty().bind(m.getObsValue()); 处导致了 NullPointerException。该应用程序是用 MVC 模式编写的。
型号:
public class Model {
private int value;
private ObservableValue<String> obsInt;
public Model(){
value = 5;
obsInt = new ReadOnlyObjectWrapper<>(value + "");
}
public int getValue(){
return value;
}
public void setValue(int value){
this.value = value;
}
public ObservableValue<String> getObsValue(){
return obsInt;
}
}
控制器:
public class Controller {
private Model m;
private View v;
public Controller(Model m, View v){
this.m = m;
this.v = v;
}
public void handleMouseclick(MouseEvent e){
m.setValue(m.getValue() + 5);
}
public void init(){
v.setOnMouseClicked(this::handleMouseclick);
}
}
查看:
public class View extends Region{
private Model m;
private Label label;
public View(Model m)
{
this.m = m;
label.textProperty().bind(m.getObsValue());
label.setLayoutX(200);
label.setLayoutY(200);
paint();
}
public void paint(){
getChildren().clear();
getChildren().addAll(label);
}
@Override
public double computePrefHeight(double width){
return 800;
}
@Override
public double computePrefWidth(double height){
return 600;
}
}
您可能已经注意到,我目前仍在学习 JavaFX。所以我可能只是错过了一些愚蠢的事情。任何建议将不胜感激!
【问题讨论】:
标签: java data-binding javafx