我想更新管理多个建筑物的应用程序。这些中的每一个都包含它所包含的人数。每10秒,每栋建筑的人口增加1。
我的意思是“更新”是“从Swing到JavaFX的端口”。
当前的Swing应用程序使用后台javax.swing.Timer
线程实现定期操作:
new Timer(10000, (e) -> {
for (Building building : theSuperKawaiBuildingList) {
building.setPopulation(building.getPopulation() + 1);
}
});
...而model.Building
是java.util.Observable
的一个子类:
public class Building extends Observable {
private int population;
public synchronized int getPoulation() {
return population;
}
public synchronized void setPoulation(int value) {
population = value;
setChanged();
notifyObservers();
}
public Building(int initPopulation) {
population = initPopulation;
}
}
现在,我想使用JavaFX而不是Swing以及API的绑定功能来构建一个新的GUI,可能会实现model.Building
类,如下所示:
public class Building {
// <editor-fold desc="FX Property - Population">
private final IntegerProperty population;
public IntegerProperty populationProperty() { return population; }
public int getPopulation() { return population.get(); }
public void setPopulation(int value) { population.set(value); }
// </editor-fold>
public Building(int initPopulation) {
population = new SimpleIntegerProperty(initPopulation);
}
}
我认为java.util.Timer
可以适应期刊的内容,但经过一些阅读后,我对更新将被绑定到活动场景图的属性的(线程)安全性产生怀疑来自后台任务...
除非绑定带有一些魔法使我想做的事情成为可能,否则最佳做法是什么。