1

ユーザーがさまざまなデータベースに保存されているタスク リストを表示できるようにするアプリケーションを作成しています。何が起こるかというと、ブラウズ可能なデータベースの名前のリスト (テキスト ファイルとして保存されています) があります。プログラムは、そのリストの最初のデータベースをロードし、内容を表示します。次に、メニューから、ユーザーがリスト内の別のデータベースを選択できるようにします。(アンディ、ボブ、カールのタスクを表示したいようなものです...)。

問題は、新しいデータベースの内容が表示されるように UI を更新する方法がわからないことです。現在リストされているタスクを削除し、DB から読み取ってから再投入するのは簡単です。しかし、EventQueue にロードされた Runnable のインスタンスにアクセスする必要があるため、(Singleton データベース ドライバーから) このコードにアクセスできません (これまでに遭遇したすべてのチュートリアルと同様に、すべての JComponents はプライベートです)。 )。EventQueue の get/peek メソッドを見ていますが、AWTEvents を返し、AWTEvent と Runnable の間に java.lang.Object 以外の関係が見られないため、必要なものではないようです。

では、現在の Runnable を取得することは可能ですか? どのように?

ご指導いただきありがとうございます。

4

2 に答える 2

3

Concurency in Swingに関する優れたチュートリアルがありますが、それについては誰も教えてくれません。それは時代遅れです

あなたには2つの選択肢があります

1) Runnable#Thread、ただし、GUI へのすべての出力は にラップする必要がありますinvokeLater()。詳細については、チュートリアルを参照してください。Concurency in Swing

2) またはSwingWorkerを使用して

于 2011-11-05T17:20:29.670 に答える
2

あなたはこれについて間違っているのではないかと思います。やりたいことは、コントロール クラス内からデータベースを変更することです (MVC 命名法を使用)。たとえば、使用可能なデータベースを JList にロードするとします。次に、このコンポーネントのコントロール (ListSelectionListener など) で、新しいデータベースをロードする SwingWorker を実行し、そのパブリッシュ/プロセス ペアを介して GUI に結果を表示します。メソッドまたはdoneメソッドで。データベース コード (モデル) は、コードのビューまたは GUI 部分 (Runnable と呼ばれる) について何も認識しない必要があります。

于 2011-11-05T20:06:03.560 に答える