2016-04-16 7 views
1

私はユーザーがリモートで問題を解決できるようにするJavaFXデスクトップアプリケーションを作成しています。それはクラウドストレージにファイルをダウンロードし、そこから結果をアップロードします(ちょっと変わって見えるかもしれませんが、現在はそうではありません)。進捗リスナーをリスト内のオブジェクトに接続する正しい方法

問題(モデル)とコントローラクラスを表すクラスがあり、定期的にクラウドにアクセスします。クラウドストレージAPIのProgressListenerクラスの助けを借りて、各問題のダウンロード/アップロードの進行状況を追跡します。リスト内のすべての問題に対して個別のインスタンスが必要でした(同時にダウンロードできるように)ので、Problemクラスの進捗リスナーのインスタンス変数を作成しました。問題は、各ダウンロード/アップロードの最後に、(クラウドストレージとの会話のような)いくつかのアクションを実行し、このコードをすべてProblemクラスに書き込むことです(またはControllerメソッドを呼び出すことさえあります)私には良いアイデアのように思える。

問題のクラスには、次のようになります。

public class Problem { 
    private SimpleIntegerProperty progress; 
    private ProgressListener progressListener; 
    public Problem() { 
     progressListener = new ProgressListener() { 
      @Override 
      public void updateProgress(int bytes,int total) { 
       progress.set(bytes); 
       if (bytes==total) { 
        // do smth in cloud storage 
       } 
      } 
     } 
    } 
} 

私の質問は、適切な相互作用のこの種を実装する方法です。

答えて

0

コントローラクラスは、ダウンロードの進捗状況を把握するための自然な場所だと思います。 そこで、進捗リスナーを作成します:

public class Controller { 

    public ProgressListener createProgressListener(Problem problem, Consumer<Problem> onDownloadComplete) { 

     return new ProgressListener() { 

      @Override 
      public void updateProgress(int bytes, int total) { 
       if (bytes == total) { 
        onDownloadComplete.accept(problem); 
       } 
      } 
     }; 
    } 
} 
関連する問題