2016-05-06 3 views
0

は、現在選択された行を示す、Iは、データベーステーブルを表すオブジェクトを持っており、それが特性を有していると仮定:JavaFXで派生した読み取り専用のプロパティ/値を実装する方法は?

class MyTable { 

    private IntegerProperty currentRow ... 

    public IntegerProperty currentRowProperty() { 
     return currentRow; 
    } 

    public int getCurrentRow() { 
     return currentRow.get(); 
    } 

    public void setCurrentRow(int newValue) { 
     currentRow.setValue(newValue); 
    } 
} 

は、今は行が前に移動することができるかどうかを示すために追加の明示的な読み取り専用のエンティティを希望(「前の」ボタンにバインドする)。返されたクラスのバインド、ない財産となりますので、

私は

class MyTable { 

    private BooleanBinding previousExist = currentRowProperty().greaterThan(0); 

    public BooleanBinding previousExistBinding() { 
     return previousExist; 
    } 

    public boolean isPreviousExist() { 
     return previousExist.get(); 
    } 
} 

バインディングでそれを実装する場合、私は、JavaFXのプロパティのパターンに違反することになります。

したがって、私はプロパティに結果をラップする必要がありますが、どのように?

私は

class MyTable { 
    private ReadOnlyBooleanPropertyBase previousExist = new ReadOnlyBooleanPropertyBase() { 
     @Override 
     public boolean get() { 
     return getIndex() >= 0; 
     } 
     ... 
    } 
} 

を記述する場合、私は変更の報告に頼ることができなくなり、明示的に屈折率変化を聞くと、前方にそれらを発射する必要があります。

実装方法は?

答えて

1

ReadOnlyBooleanWrapperが使用することです:

private ReadOnlyBooleanWrapper previousExist; 
{ 
    ReadOnlyBooleanWrapper ans = new ReadOnlyBooleanWrapper(); 
    ans.bind(currentRowProperty().greaterThan(0)); 
    previousExist = ans; 
} 

public ReadOnlyBooleanProperty previousExist() { 
    return previousExist.getReadOnlyProperty(); 
} 

public boolean isPreviousExist() { 
    return previousExist().get(); 
} 
関連する問題