2016-03-23 13 views
-1

私はJavaFXでメッセンジャーを開発しています。ObservableListのアイテムのプロパティの変更を観察する方法

Contactは、Userと最後のMessageという2つの主な特性を持っています。

は私が最新のメッセージと連絡先の

  1. リスト私は2つのソリューションにこれまで

    まず解決来た

名でソート連絡先の

  • リストを表示する必要がありますContactを不変にすることです。新しいメッセージが到着するか、ユーザーの情報が変更されるたびに連絡先を置き換える必要があります。それは動作しますが、連絡先は更新時ListViewでを点滅させます。

    第二の溶液ObjectPropertyを使用することです:

    public class Contact { 
        private final ObjectProperty<User> user = ...; 
        private final ObjectProperty<Message> lastMessage = ...; 
    } 
    

    その場合、私はContactがに/リストから削除/追加されたときにContact年代のプロパティにリスナーを追加/削除するカスタムObservableListを作成する必要があります。両方のリストを自動的にソートする必要があるためです。

    したがって、両方のソリューションには欠点があります。

    私の目標を達成するための推奨事項を教えてください。 FXCollectionsクラスで

  • +0

    [Java 8 SortedList TableViewがリフレッシュしない]の複製があります(http://stackoverflow.com/questions/21171948/java-8-sortedlist-tableview-not-refreshing) – kleopatra

    +0

    はい、これはまったく同様の問題ですまったく同じ治療法;-) – kleopatra

    答えて

    2

    、リストアイテムからプロパティリスト変更イベント発動すべきリスト伝えるために、「抽出」機能を使用する1つの方法がある:これはあなたを与えるだろう

    https://docs.oracle.com/javase/8/javafx/api/javafx/collections/FXCollections.html#observableArrayList-javafx.util.Callback-

    は、 2番目のソリューションと同じアプローチですが、リスナーを自分で管理するコードを書く必要はありません。

    +0

    ありがとう!私はその方法と抽出者を何とか見逃していました。 –

    関連する問題