3

Bean のリストを JTable にマップします。アイデアは、各列が Bean の事前選択されたフィールドになり、各行がリストの Bean になるということです。ここのスライド #32 は非常に有望に見えます: http://swinglabs.org/docs/presentations/2007/DesktopMatters/beans-binding-talk.pdf

ただし、NetBeans は、Bean フィールドを列に割り当てさせてくれるという点で、あまり友好的ではありません。JTable を右クリックし、[Bind] -> [Elements] をクリックして、Bean のリストにバインドします。ただし、各列に何を入れるかを指定することはできません。唯一の選択肢は、自分でバインディングを作成することです。これにより、NetBeans はこの種の用途にはほとんど役に立たなくなります。

私が見逃している詳細はありますか?NetBeans の JTable BeansBinding が壊れているようです。

ありがとう

4

3 に答える 3

6

私はそれを機能させています。JTablesの[バインド]メニューオプションを実際に使用することはできません。これを機能させる方法は次のとおりです。

  1. JTableを右クリックします。
  2. 「テーブルの内容」をクリックします。
    1. バインディングソース:フォーム
    2. バインディング式:$ {var}(varはBeanのリストの名前です)。
  3. [列]タブをクリックします。
  4. 列を式にマップします。${var.id}ではなく${id}のようになります。

注:列にマップされる各フィールドには、ゲッターが必要です。

于 2009-07-22T19:26:16.220 に答える
4

この種の作業に IDE を使用することは魅力的かもしれませんが、自分でコーディングすることに代わるものはありません。

個人的には、表に Bean を表示するためにGlazed Listsを好みます。この 2 分間のビデオをご覧いただければ、きっと夢中になること間違いなしです。15 行未満のコードで、探しているものを取得し、表示を大幅に制御できます。さらに、準備ができたら、フィルタリング、並べ替え、およびその他のあらゆる種類の優れた機能を使用できます。

于 2009-07-22T03:07:37.960 に答える
0

リストを観察可能なものにしてみてください。初期化を次のように変更します。

list1 = ObservableCollections.observableList(new ArrayList<Person>());

その後、多くのスタッフが働き始める必要があります。Beanにバインドしている場合は、バインドするプロパティのsetメソッドでプロパティ変更イベントを発生させるようにしてください。このコードを追加してください。

private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);

public void addPropertyChangeListener(PropertyChangeListener listener) {
    changeSupport.addPropertyChangeListener(listener);
}

public void removePropertyChangeListener(PropertyChangeListener listener) {
    changeSupport.removePropertyChangeListener(listener);
}

インポートを修正してから、次のようにします

public void setFirstName(String firstName) {
    String oldFirstName = this.firstName;
    this.firstName = firstName;
    changeSupport.firePropertyChange("firstName", oldFirstName, firstName);
}
于 2010-02-07T19:30:31.587 に答える