1

Hibernate を使用して JPA を学習し、それを Beans Binding を使用して Netbeans に組み込まれた GUI にバインドしようとしています。犬一覧アプリです。各犬は、1 匹から多数の子犬を持つことができます。犬を追加および削除でき、犬ごとに子犬を追加および削除できます。

犬は JList に表示されます。ユーザーが犬を選択すると、そのプロパティが JTextFileds に表示され、その子犬が JTable に表示されます。Dog インスタンスを含むリストは監視可能であるため、犬の追加/削除は正常に機能します。

Dogs の子犬は、getter と setter を使用して Dog クラスの Collection で維持されます。

@OneToMany(targetEntity = Puppie.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "dog_id")
private Collection<Puppie> puppies;

public Collection<Puppie> getPuppies() {
    if (puppies == null) {
        puppies = new ArrayList<Puppie>();
    }
    return puppies;
}

public void setPuppies(Collection<Puppie> puppies) {
    Collection<Puppie> oldPuppies = this.puppies;
    this.puppies = puppies;
    changeSupport.firePropertyChange("puppies", oldPuppies, puppies);
}

JList で選択した犬に子犬を追加しても、すぐに JTable に反映されません。JTable に表示されるようにするには、別の犬を選択してから、子犬を追加した犬を再度選択する必要があります。Dog クラスで次の子犬の追加/削除メソッドを使用しています。

public void addPuppie(Puppie puppie) {
    getPuppies().add(puppie);
}

public void deletePuppie(Puppie puppie) {
    getPuppies().remove(puppie);
}

JTable は、バインド式として ${selectedElement.puppies} を使用して JList (犬リストではなく) にバインドされます。

パピー クラスのセッターは、プロパティが設定されると、プロパティの変更を発生させます。

これは子犬を追加するためのコードです:

@Action
public void addPuppy() {
    Puppie p = new Puppie();
    p.setName("new puppie");
    entityManager.persist(p);

    int selectedIndex = dogsJList.getSelectedIndex();
    Dog d = (Dog) dogList.get(selectedIndex);
    d.addPuppie(p);
    setSaveNeeded(true);
}

どんな助けでも大歓迎です!さらに情報が必要な場合はお知らせください。

よろしく、ヘンリック

4

2 に答える 2

2

addPuppie メソッドを変更する必要があると思います。

public void addPuppie(Puppie puppie) {
   getPuppies().add(puppie);
   changeSupport.firePropertyChange("puppies", oldPuppies, puppies);
} 

子犬のコレクションを変更する際に PropertyChangeEvent を発生させる必要があるためです。

于 2010-08-06T12:52:17.700 に答える
0

JTable が自動的に更新されないようです。Netbeans によって生成されたコードを見ると、JList の選択がクリアされ、エントリが再選択され、JTable が更新されます。

Netbeans がこのコードを生成するので、2 番目の JTable は Bean Binding で自動的に更新できず、JList の選択をクリアしてからエントリを再選択する必要があると想定しています。

于 2010-08-10T12:06:43.417 に答える