2013-10-28 36 views
0

我有以下的TableView(JavaFX的2.2.45),禁止某些行:如何TableView中

Period Number Number Number 
--------------------------------- 
1   x   x  x 
2   x   x  x 
3   x   x  x 
. 
. 
24   x   x  x 

的時段列表示一天中的小時。數字列是可編輯的。我希望能夠在當前小時之前禁用行。例如,如果是10:15,我想禁用第1行到第11行。我怎樣才能使用當前小時(這很容易計算並放入一個變量)來實現這一點?

+0

我第一次嘗試在http://stackoverflow.com/questions/10925882/disable-tablerow-based-on-data的頂部答案中提到的策略,但無法讓這些工作。現在我有一個基於表格模型中的自定義cellFactory和BooleanProperty的工作解決方案,但認爲我應該再次嘗試使用rowFactory,這似乎是更好的解決方案。 – user2929292

回答

0

最後,TableView.setRowFactory()正常工作。我newed了這個類作爲參數來setRowFactory(爲簡潔起見省略泛型):

public class LockableRow implements Callback { 

    @Override 
    public TableRow call(TableView tableView) { 
     return new TableRow() { 
      @Override 
      protected void updateItem(LockableModel item, boolean empty) { 
       super.updateItem(item, empty); 
       if (!isEmpty()) { 
        if (isRowDisabled(tableView, getIndex())) { 
         setDisable(true); 
        } else { 
         setDisable(false); 
        } 
       } 
      } 
     }; 
    } 

    private boolean isRowDisabled(TableView tableView, int thisRow) { 
     ObservableList rows = tableView.getItems(); 
     return (thisRow< rows.size() && rows.get(thisRow).isDisabled()); 
    } 
} 

在這裏,模型背襯表視圖是LockableModel它實現isDisabled()