7

次のコードを使用するとArrayList、にあるアイテムをに追加しようとしています。JList

private void UpdateJList(){
    DefaultListModel<String> model = new DefaultListModel<String>();
    for(Person p : personList){
        model.addElement(p.ToString());
    }
    clientJList.setModel(model);
    clientJList.setSelectedIndex(0);
}

ただし、メソッドの外側を宣言するDefaultListModelと、追加によって各アイテムが増分されます。つまり、各アイテムの1つを追加する代わりに、複数のアイテムが追加されます。なぜこれが起こるのか疑問に思っていましたか?

4

1 に答える 1

16

DefaultListModelupdateメソッドの外部で定義すると、インスタンス変数になるため、1つのインスタンスで同じ値になります。したがって、このメソッドを同じインスタンスから何度も呼び出すと、既存のリストに値が追加されるだけです。したがって、複数のアイテムが表示されます。

:外部関数を宣言しDefaultListModelても問題は発生しません。そのオブジェクトを関数外にすることが問題になります。あなたは問題なく以下を行うことができます:

DefaultListModel<String> model;

private void UpdateJList(){
    model = new DefaultListModel<String>();
    for(Person p : personList){
         model.addElement(p.ToString());
    }    
    clientJList.setModel(model);     
    clientJList.setSelectedIndex(0);
}

または、モデルから以前の値をクリアしてから、新しい値を追加してみてください。

于 2011-11-24T08:13:22.020 に答える