1

Swing List コントロールを使用してデータをバインドしています。モデルを作成するにはクラスを使用する必要があります

public class SubjectListModel extends AbstractListModel<String> {

public ArrayList<Subject> listSubjects;

public SubjectListModel(ArrayList<Subject> listSubjects) {
    this.listSubjects = listSubjects;
}

@Override
public int getSize() {
    return listSubjects.size();
}

@Override
public String getElementAt(int index) {
    return listSubjects.get(index).name;
}
 class Subject{
 int id;
string name;
}

List を使用して ArrayList をバインドしたいのですが、「name」フィールドに「display text field」、「id」に「value field」などを設定できますか? 必要に応じてこれらの値を取得できるようにします。最高の夢は、文字列フィールドではなく、選択した「件名」全体を取得できることです。リストにgetSelectedValueしかないのを見ました。リストにサブジェクトを表示したい場合は、モデルにgetValueAt()を設定して「名前」を返す必要があり、getSelectedValue()は選択された「名前」も返します:(モデル クラスの getElementAt() を変更して "Subject" を返すようにすると、リストに @object.abxdef が表示されます

4

1 に答える 1

2

をオーバーライドtoString()Subjectて、リストに表示したいものを返すだけです。次に、すべてのSubjectインスタンスをリストに追加します。カスタムの必要はありませんListModel。を使用するだけDefaultListModelです。選択したものを取得したら、そのSubjectゲッターの 1 つを必要なフィールドに使用します。

また、オブジェクトを 2 つの場所 (つまり、ListModelArrayList) に格納する必要はなく、すべてをモデルに追加するだけです。

class Subject {
   private int id;
   private String name;

   public Subject(int id, String name) {
       this.id = id;
       this.name = name;
   }

   public int getId() { return id; }
   public String getName() { return name; }

   @Override
   public String toString() {
       return name;
   }
}

DefaultListModel model = new DefaultListModel();
model.addElement(new Subject(1, "Math"));
Subject subject = (Subject)model.getElementAt(0);
System.out.println(subject);
// result -> Math
于 2014-09-06T16:04:09.330 に答える