0

DefaultComboBoxModelを使用して、アプリ内のさまざまなJComboBoxのデータを管理しています。

データの読み込み中または再読み込み中は、これらのコンボボックスを無効にします(または、「読み込み中...」というテキストを表示して、ポインターを砂時計に設定します)。

モデルがデータをリロードしていることをJComboBoxに通知する方法はありますか?

リロードは別のスレッドで発生しています。

4

3 に答える 3

3

AbstractListModelは、と呼ばれる関数がありますaddListDataListener(ListDataListener l)。これで、メソッドが呼び出されたときに通知される独自のリスナーを実装できますfireContentsChanged(Object source, int index0, int index1)(これはバックグラウンドで実行されるため、これを行う必要はありません)。

AbstractListModel

于 2012-10-19T15:34:04.233 に答える
3
于 2012-10-19T15:35:39.350 に答える
3

バックグラウンドタスクにSwingWorkerを使用しsetEnabled(false)、SwingWorkerのバックグラウンドスレッドの実行中にJComboBoxを呼び出し、スレッドが完了したらJComboBoxを再度有効にします。これは、SwingWorkerにPropertyChangeListenerを追加して、その状態プロパティをリッスンし、StateValue.DONEになったときに通知を受けることで判断できます。モデル自体は、Swingイベントスレッドでのみ更新する必要があることに注意してください。したがって、たとえば、データがデータベースから着信している場合は、バックグラウンドスレッドでデータベースから情報を取得しますが、それをイベントスレッドのコンボボックスのモデルに渡します。SwingWorkerのプロセス/公開メソッドのペアはこれを行うための良い方法です。

于 2012-10-19T15:50:46.903 に答える