[英]JavaFx how can my model update View?
我是JavaFx的新手。 我制作了fxml文件,並創建了控制器。 目前一切正常。 在我的模型中,我有一些線程可以從Internet下載一些文件。 我想將進度通知到UI(以更新進度指示器組件)。
我該怎么做?
這是Controller調用的Model方法。 我想通知用戶該過程的進展。 例如:線程結束時+ 10%。
public void download(){
ExecutorService pool = Executors.newSingleThreadExecutor();
List<Future<String>> futures = new ArrayList<Future<String>>();
futures.add(pool.submit(new Downloader(URL)));
futures.add(pool.submit(new Downloader(URL)));
pool.shutdown();
pool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
... Manipulate downloaded files.
}
我該怎么做 ? ^^
我建議您與控制器通信,這將更新視圖。 在這種情況下,它將是Supervising Controller ,而不是經典控制器 。
監督控制器有兩個主要職責:輸入響應和部分視圖/模型同步。 ( 主管馬丁·福勒(Martin Fowler))
為此,我將在模型上創建一個回調接口,並在控制器上實現。 當調用下載或構造模型時,或者在注冊方法中,我將回調對象從控制器傳遞到模型,然后模型將在其上調用將在控制器中處理的更新方法以更新GUI。
在您的情況下,重要的一件事是線程。 在使用JavaFX時,如果在主線程中執行所有這些操作,則GUI將“凍結”。 因此,您必須創建另一個線程來下載文件。
另外,在另一個線程中時,您將無法更新GUI。 要正確執行此操作,應使用Platform.runLater(java.lang.Runnable runnable)
,這樣傳遞的Runnable將由JavaFX在主線程上執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.