簡體   English   中英

JavaFx我的模型如何更新View?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM