2016-09-28 20 views
0

したがって、DefaultListModelを使用してJListを更新しようとしています。今私はオンラインの例を見て、モデルを更新する機能を作った。私が直面している問題は、updateUI()メソッドを呼び出した後でも、モデルが更新されていてUIは更新されていないことです。ここに私のコードです。JListの更新UI

public void updateAthleteList() { 

System.out.println("Trying to update"); 
//call updateUI() for the JList object 
athletesModel.clear(); 
System.out.println(athleteList.size()); 
for(int i = 0; i < athleteList.size(); i++) { 

    System.out.println("Inside loop"); 
    athletesModel.addElement(((Athlete) athleteList.get(i)).toStringCount()); 
} 

athletesList.updateUI(); 
System.out.println(athletesModel.size()); 
System.out.println(athletesList.getModel().getSize()); 
} 

出力行は、デバッグするためだけのものでした。助けを得ることができたら本当に感謝しています。前もって感謝します。

UPDATE

私は単純な文字列で、この時間を働いていると私は大きさが、JListの中に、まだ全く変化をプリントアウトしてモデルが更新されています。ここにコードです

public void updateAthleteList(Athlete newAthlete) 
{ 
    System.out.println("Trying to update"); 
    //call updateUI() for the JList object 
    DefaultListModel tempModel = (DefaultListModel)athletesList.getModel(); 
    tempModel.addElement("hij"); 
    System.out.println(athletesList.getModel().getSize()); 
    athletesList.setModel(tempModel); 
    athletesList.updateUI(); 
    System.out.println(athletesList.getModel().getSize()); 
} 
+1

のための彼の後のupdateUI()メソッドを呼び出すための任意の必要はあり決してありません。モデルを更新するだけです。 JListが更新されない場合は、1)モデルがフレームに表示されているJListに属していないか、2)Event Dispatch Threadでモデルを更新していないかのいずれかです。問題はあなたが投稿しないコードにあります。問題を示す適切な[SSCCE](http://sscce.org/)を投稿してください。つまり、JListとアクションリスナーを含むボタンを使用して簡単なGUIを作成し、モデルに項目を追加します。簡単なコードが動作することを証明して、実際のプログラムを修正してください。 – camickr

+0

私はそれを試みますが、どこかでVectorを直接更新するのではなく、モデルを更新するべきであると読んでいます。私がやっていることは、あるパネルからベクトルを更新して、それをモデルを更新している別のパネルに渡していることです。それが問題なのでしょうか? – anonymousCoder

+0

はい、モデルを更新する必要があります。あなたは 'SSCCE'を投稿していないので、これ以上の提案はできません。 – camickr

答えて

0

モデルJListをどこかに設定しますか?おそらく、そのコンストラクタ

JList s = new JList(); 
DefaultListModel x = (DefaultListModel) s.getModel(); // 

または

//change athletesList.updateUI(); 
jList.setModel(athletesModel); 
+0

申し訳ありません運がありません。私はコンストラクタでモデルを設定しましたが、それは問題ではないと思います。私のモデルを更新し、関数athletesList.getModel()。getSize()を呼び出すとモデルのサイズは正しいが、UIは更新されない – anonymousCoder

+0

彼は再ペイントしようとしましたか? – DarkFenix

+1

repaint()を使う必要はありません。モデルを更新すると、JListは自動的に再描画されます。 – camickr