2017-06-16 11 views
0

私は以下の問題を抱えています:ObservableListのオブジェクトを取得して、自分のメソッドを記述することはできますか?

私はActiveDateListとMainFrameの2つのクラスを持っています。 ActiveDateList(シングルトンとして記述)はArraylistを拡張し、現在アクティブな "MyDate"を保持します。

ActiveDateList:

public class ActiveDateList extends ArrayList<MyDate>{ 

    private static ActiveDateList instance; 

    private ActiveDateList(){} 

    public static ActiveDateList getInstance(){ 
     if(instance == null){ 
      instance = new ActiveDateList(); 
     } 
     return instance; 
    } 

... 

    public void addSorted(MyDate md){ 
    ... 
    } 
} 

メインフレームクラスは "ActiveDateList" のObservableListを使用する必要があるJavaFXアプリケーションです。

コードそうする:

ActiveDateList activeDatelist = ActiveDateList.getInstance(); 
    ObservableList<MyDate> observableADList = FXCollections.observableList(list); 

しかしそうした後、私は「addSorted」のようなものがObservableListを介してアクセスすることができないので、私は、ActiveDateListに持っているすべての自己書かれたメソッドへのアクセスを失い、私がactiveDateList.addSorted(..)を呼び出すたびにobservableADListは明らかにリスナーに通知しません。

ObservableListを実装するClassが必要で、すべてのメソッドをオーバーライドする代わりに、ArrayListクラスのメソッドを使用するだけで、自分のメソッドを書き込むことができます。

すべてのアイデアに感謝します。

+0

static static void addSorted(MyDate md、List リスト)メソッドを追加し、現在の静的でないaddSortedメソッドを委譲することを検討してください。 – VGR

+0

あなたのシングルトンはスレッドセーフではありません。あなたのシングルトンに 'enum'を使うことをお勧めします。これは、シングルトンが必要とする機能(デフォルトではスレッドセーフな初期化、プライベートコンストラクタ)にバンドルされているので、 - [enumでシングルトンを実装する]をチェックしてください(https://stackoverflow.com/questions/26285520/implement-single-with-enum-in-java)を使用します。シングルトンを複数のスレッドに渡って使用する場合は、 'class'を使用する方がよい場合は、[double-checked locking](https://en.m.wikipedia.org/wiki/Double-checked_locking)を実装する必要があります。これは解決策ではなく、単なる提案です。 –

答えて

0

ArrayListの代わりにjavafx.collections.ModifiableObservableListBaseクラスを拡張することができます。その後、beginChangeendChangeメソッドを使用して、リスナーに通知できます。以下を参照してください:https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableListBase.html#beginChange--

+0

あなたの提案をありがとう、それは多くの意味があるように聞こえます。 しかし、私は今、継承された抽象メソッドdoAdd、doRemove、doSet、getとsizeを実装し、それらに何を書き込むのか分からなくてはなりません。 クラスをArrayListを拡張するのではなく、クラスの変数としてListを追加する必要がありますか? –

+0

はい、 'ModifiableObservableListBase'のjavadocは、それらのメソッドが' ArrayList'に委譲する実装の例を示しています。クラスをスレッドセーフにする必要がある場合は、代わりに 'CopyOnWriteArrayList'を使用することを検討してください。 – Apokralipsa