2012-12-19 13 views
6

Desidero creare una classe quasi identica all'oggetto restituito da FXCollections.observableArrayList() ma con alcune funzionalità aggiuntive. Il mio primo pensiero è stato qualcosa di simileimplementare ObservableList, estendere ObservableListWrapper

public class MyObservableList implements ObservableList 
{ 
    private ObservableList list = FXCollections.observableArrayList(); 

    public functionWhatever() 
    { 
     // whatever 
    } 

} 

ma che significa sovrascrivendo i ~ 30 funzioni che vengono con ObservableList (che sembra un suggerimento che sto facendo qualcosa di sbagliato).

FXCollections.observableArrayList() restituisce un oggetto di tipo com.sun.javafx.collections.ObservableListWrapper, ma quando estendo ObservableListWrapper che sto necessarie per creare un costruttore come

MyObservableList(List arg0) 

o

MyObservableList(List arg0, Callback arg1) 

che mi preoccupa perché FXCollections.observableArrayList() non accetta qualsiasi argomento.

Non so come FXCollections crea l'oggetto ObservableListWrapper che restituisce ma voglio MyObservableList di essere identico a quello oggetto restituito da FXCollections (più un paio funzioni extra).

Come posso fare?

+0

'ObservableList' implementa' Elenco' e 'Osservabile'. Cosa succede se hai creato la tua lista, facendola ereditare da una classe di implementazione di 'List' e 'Observable' invece di' ObservableList', o hai bisogno di usarla per qualcosa che richiede 'ObservableList'? –

+1

Il problema è che JavaFX utilizza ObservableList dappertutto. Il modo ufficiale per creare un oggetto ObservableList è tramite FXCollections.observableArrayList(). Voglio che gli oggetti creati dalla mia classe siano identici (perché chissà cosa cambierà in futuro) ma con funzioni aggiuntive. – beardedlinuxgeek

+0

Potresti usare un delegato di wrap-up? – Rekin

risposta

2

Estendere SimpleListPropertydocs.oracle.com

Questa classe fornisce una piena attuazione di una proprietà avvolgendo un ObservableList.


Avviso questo ctor:

pubblico SimpleListProperty (ObservableList initialValue)

Così si può:

public class MyObservableList extends SimpleListProperty 
{ 
    //constructor 
    MyObservableList(){ 
     super(FXCollections.observableArrayList()); 
    } 

    public functionWhatever() 
    { 
     // whatever 
    } 

} 

In questo modo la classe sarà basata su un ArrayList.

+1

Grazie, questo era esattamente ciò di cui avevo bisogno – beardedlinuxgeek

+1

Contento di aver potuto aiutare – drzymala