私はいくつかの建物を管理するアプリケーションを更新したいと思います。これらのそれぞれは、それに含まれる人の数を身に着けます。 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;
}
}
、私は思いますSwingの代わりにJavaFXを使用し、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);
}
}
私は、定期的なものについては、法案に合うかもしれないと思うが、読んだ後には、アクティブなシーングラフにバインドされるプロパティを更新する(スレッド)安全性に疑問がある。バックグラウンドタスク...
バインドに私ができることを可能にするいくつかの魔法が付属していない限り、それを実行するのがベストプラクティスです。
コンテキストPS:私はJavaFX初心者ですが、これはこのフレームワークの私の最初のアプリです。 – Odepax