【发布时间】:2017-03-09 14:07:28
【问题描述】:
我已经为我的学校项目(调谐器)实施了 fft,但我无法将计算出的频率传递给 GUI。我尝试了绑定,关键帧,我似乎无法掌握它,我对 java 真的很陌生。
public class FrequencyBean {
double freq;
private SimpleDoubleProperty value = new SimpleDoubleProperty(this, "value");
public void setValue(double value){
this.value.set(value);
System.out.println(value+" set");
}
public DoubleProperty getDoublePropertyValue(){
System.out.println("gotvals");
return value;
}
public FrequencyBean(){
freq = 10.0;
}
这是我的控制器的一部分,我也被推荐使用称为紧密绑定的东西,这将是这个类的抽象。这对我的代码有好处吗?
这是我的主控制器:
public class Controller implements Initializable{
FrequencyBean fbean;
@FXML
private Label otherFq;
@FXML
private Text frequency;
@FXML
private Text sharpFq;
@FXML
private Rectangle sharp6;
@FXML
private Text flatFq;
@FXML
private Rectangle center_rectangle;
@FXML
private Rectangle sharp1;
@FXML
private Rectangle sharp2;
@FXML
private Rectangle sharp3;
@FXML
private Rectangle sharp4;
@FXML
private Rectangle sharp5;
@FXML
private Text centerFq;
@FXML
private Rectangle flat6;
@FXML
private Rectangle flat5;
@FXML
private Rectangle flat4;
@FXML
private Rectangle flat3;
@FXML
private Rectangle flat2;
@FXML
private Rectangle flat1;
@Override
public void initialize(URL location, ResourceBundle resources) {
fbean = new FrequencyBean();
otherFq = new Label();
frequency = new Text();
boolean stop = false;
InputThread input = new InputThread();
Task<Void> in = new Task<Void>() {
@Override
protected Void call() throws Exception {
input.run();
return null;
}
};
Thread th0 = new Thread(in);
th0.start();
frequency.textProperty().bind(fbean.getDoublePropertyValue());
}
【问题讨论】:
-
永远不要初始化带有
@FXML注释的字段(@FXML的全部意义在于它们将由FXMLLoader创建)。在这里,您创建一个新的Text对象,将其分配给frequency,并且从不显示它,因此无论您如何更改其text,结果都将永远不可见。删除frequency = new Text()。 -
@James_D 感谢您的回复。虽然我得到的只是一堆不知从何而来的 FXML 错误,但我已经解决了这个问题。无论如何,您能否提供有关 DoubleProperty 如何工作的信息?现在似乎可以正常工作,但是当我将
double分配给DoubleProperty的 set 方法时卡住了。 -
对不起,我不太明白你在问什么。 “卡住”是什么意思?
-
我已经在某些点上设置了 sysouts,当我的代码到达带有
double参数的方法调用时,它将它分配给DoubleProperty它停止并且不执行以下代码。我使用了并发,这是在Task中扩展的,所以我的gui没问题,但是后面的代码被停止了。 -
它抛出异常,因为更改属性会导致 UI 通过您的绑定更新,并且您无法从后台线程更新 UI。 (在您的任务上设置一个
onFailed处理程序并在其中执行task.getException().printStackTrace()以查看...)
标签: java javafx data-binding bind keyframe