2012-01-17 10 views
3

私は今、arraylistに基づいたJListを作成しました。これはdefaultlistmodelで埋められています。リストはサーバーに接続するときにユーザーを追加しますが、接続しているユーザーまたは接続しているユーザーは表示されません。だから、私はJListを更新する必要があります。JListの更新

私の質問は次のとおりです。

更新する必要はありますか?更新を実行するタイマーを使用することは可能ですか、誰かがサーバーに入ったときに実行されるupdatemethodを実装する必要がありますか?

ps。これはIRCとよく似たチャットサーバーです。

GUI:

jList2 = new javax.swing.JList(); 
try{ 
jList2.setModel(gl.getUsersOnlineAsDefaultListModel(gl.getClients()) 
    ); 
}catch(RemoteException ex){ 
    System.out.println(ex); 
} 
jScrollPane3.setViewportView(jList2); 

GUIロジック:

public DefaultListModel getUsersOnlineAsDefaultListModel(ArrayList<Client> clients) throws RemoteException { 
DefaultListModel result = new DefaultListModel(); 
for(Client c : clients){ 
    result.addElement(c.findName()); 
} 
    return result; 
} 

    public ArrayList<Client> getClients() throws RemoteException, NullPointerException{ 
      return cf.getClients(); 
    } 

サーバサイド:

ここ

は、コードの一部であります

ArrayList clients = new ArrayList<Client>(); public ArrayList<Client> getClients(){ return clients; } 
+0

だから、私はupdateJlistメソッドを実行したコールバックを使用して終了Iすでに持っていた。すべてが今うまくいきます – sindrem

答えて

3

私はそれを行う最良の方法は、クライアントがJListを更新するサーバーに入るイベントによって起動されるリスナーを実装することだと思います。

+0

それは素晴らしいですね。私はいくつかのドキュメンテーションをここでやっていると思います。 – sindrem

+0

arraylistを "listen"することは可能ですか?クライアントが追加された場合、JListをうまく更新できますか? – sindrem

3

更新する必要はありますか?

JListの内容を提供するリストモデル(DefaultListModel)。

アップデートを実行するタイマーを使用できますか、誰かがサーバーに入ったときに実行されるupdatemethodを実装する必要がありますか?

2番目のオプションのほうがよく聞こえます。

+0

ありがとうございました:私はいくつかの研究をしなければならない病気になる – sindrem

3

スイングはシングルスレッドです。 Swing GUIのすべての変更は、XxxListModelへの更新を含むEventDispatchThreadで行われなければならないことに同意する必要があります。あなたのコードはRemoteXxxと表示され、次にListenersまたは(あなたが質問した通り)Timerのうちのいくつかから潜在的に長いスレッドを呼び出します。

1)バックグラウンドhtreadに対して呼び出されるSwingWorkerpublish()のメソッドと、process()とEDTで `done()が呼び出されました。

2)ラップRunnble#Threadでの実行が、その後GUIへのすべての出力は、スレッドセーフな方法setText含め、invokeLater/invokeAndWaitにラップする必要がありますが、その他

+0

+1、EDTとSwingWorkerについて:-)よろしくお願いします。 –

+0

ありがとうございます。 http://www.javamex.com/tutorials/threads/invokelater.shtmlについて考えていることはありますか? – sindrem

+0

right http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html – mKorbel