2017-07-18 2 views
1

私はguiプログラム用のコードを書きました。getProgress()とgetNewValue()のJavaの相違

このプログラムには、固定数まで素数を見つけるためのSwingWorkerがあります。すべての素数が発行され、印刷されます。 計算の進行中に更新が行われるので、イベントPropertyChangeEventも起動されます。

ChangePropertyListenerは、JProgressBarを進捗値SwingWorkerで更新する必要があります。私は間の進捗状況の値を取得する方法を理解していないChangePropertyListenerで

  • myChangePropertyEvent.getNewValue()
  • mySwingWorker.getProgress()

誰かが私に言うことができます違いを説明し、getNewValue()(私はまだDocを見てきましたが、それほど表現力がありません)を説明します。

答えて

3

これらの2つは異なる目的を果たします。 SwingWorker.getProgressを呼び出すと、既に知られているSwingSorkerインスタンスの現在の進行状況が返されます。 SwingWorker.setProgress(int)の契約に従うと、対応するゲッターは常に0〜100の値を返します。このメソッドは、いつでも好きなときに呼び出すことができ、常に最新の状態になります。特定のSwingWorkerインスタンスを知っているクライアントコードはいつでもメソッドを呼び出すことができます。

一方、PropertyChangeEvent.getNewValue()は、getProgressと同じ値を返します。このメソッドを呼び出すには、SwingWorker.addPropertyChangeListener(PropertyChangeListener)を呼び出してPropertyChangeListenerを登録する必要があります。そのようなリスナーが登録されると、それは労働者の進歩に関する最新情報を受け取るでしょう。

  1. のPropertyChangeListenerはそれが聴いているSwingWorkerのについての詳細を知る する必要はありません登録した後:今3つの微妙な違いがあります。実際には は、別のオブジェクトが SwingWorker.addPropertyChangeListener(PropertyChangeListener)を介して登録した場合に、それを聞いている特定のSwingWorkerについて全く知る必要はありません。
  2. SwingWorker.setProgress(int)を呼び出すときには、PropertyChangeListener.propertyChange(PropertyChangeEvent)メソッドを呼び出す前にSwingWorkerが値を累積することがあります。つまり、setProgressを1、2、および3で連続して呼び出すと、PropertyChangeListenerインスタンスは1回だけ呼び出され、PropertyChangeEvent.getNewValue()は3を返します。これは、この方法を選択するときに特定の中間値が不足する可能性があることを意味します。
  3. WorkChangeListenerは、ワーカーのバインドされたプロパティ、つまり進捗状況とその変更内容についての通知を受け取ります。state

要約すると、積極的に従業員の進捗状況を取得したい、つまり積極的に値を要求したい場合はいつでもgetProgressを使用します。進行状況の変更について通知を受け、進行状況のすべての変更について通知されないようにするには、PropertyChangeListenerアプローチを使用します。

+1

'PropertyChangeEvent#getNewValue'は' PropertyChangeEvent#getName'の値に文脈依存であり、プロパティ名が 'state'のときに' double'を期待する値は得られません:P – MadProgrammer

+0

ありがとうそれを指摘するために!私はこれを第3の違いとして含めるために私の答えを編集しました。 –

+0

コードでは、継続的に作業者の進捗状況を取得するために 'getProgress'を使用しますか? propertyChangeListenerにない場合は、例を提供できますか? – briennakh

関連する問題