はJames_Dの勧告でそれを解決:
public class ControllableTableSelectionModel<T> extends TableViewSelectionModel<T>{
private TableViewSelectionModel<T> originalModel;
private ControlsTableView controller;
public ControllableTableSelectionModel(TableViewSelectionModel<T> originalModel, ControlsTableView controller) {
super(originalModel.getTableView());
this.originalModel=originalModel;
this.controller=controller;
}
@Override
public boolean isSelected(int row, TableColumnBase<T, ?> column) {
return originalModel.isSelected(row, column);
}
@Override
public void selectLeftCell() {
if(controller.canSelect(this))
{
originalModel.selectLeftCell();
}
}
@Override
public void selectRightCell() {
if(controller.canSelect(this))
{
originalModel.selectRightCell();
}
}
@Override
public void selectAboveCell() {
if(controller.canSelect(this))
{
originalModel.selectAboveCell();
}
}
@Override
public void selectBelowCell() {
if(controller.canSelect(this))
{
originalModel.selectBelowCell();
}
}
@Override
public void selectRange(int minRow, TableColumnBase<T, ?> minColumn, int maxRow,
TableColumnBase<T, ?> maxColumn) {
if(controller.canSelect(this))
{
originalModel.selectRange(minRow, minColumn, maxRow, maxColumn);
}
}
@Override
protected int getItemCount() {
return originalModel.getTableView().getItems().size();
}
@Override
protected T getModelItem(int index) {
return originalModel.getTableView().getItems().get(index);
}
@Override
public void focus(int index) {
originalModel.getTableView().getFocusModel().focus(index);
}
@Override
public int getFocusedIndex() {
return originalModel.getTableView().getFocusModel().getFocusedIndex();
}
@Override
public ObservableList<TablePosition> getSelectedCells() {
return originalModel.getSelectedCells();
}
@Override
public boolean isSelected(int row, TableColumn<T, ?> column) {
return originalModel.isSelected(row, column);
}
@Override
public void select(int row, TableColumn<T, ?> column) {
if(controller.canSelect(this))
{
originalModel.select(row, column);
}
}
@Override
public void clearAndSelect(int row, TableColumn<T, ?> column) {
if(controller.canSelect(this))
{
originalModel.clearAndSelect(row, column);
}
}
@Override
public void clearSelection(int row, TableColumn<T, ?> column) {
if(controller.canSelect(this))
{
originalModel.clearSelection(row, column);
}
}
}
を公開APIには具体的な実装はありません。最善の策は、 'TableSelectionModel'をサブクラス化するラッパークラスを定義することです。テーブルビューから取得した選択モデルのデフォルトインスタンスを渡し、選択を変更する場合はメソッド呼び出しを委譲します。書く方法はかなりたくさんありますが、あなたがこのように実装すれば、それぞれのことはかなり簡単になります。 –