2015-07-02 2 views
0

У меня есть очень простая модель, состоящая из 3 StringProperty, давайте назовем их property1, property2 и property3. В моей модели я определил обычные методы get/set/property. Теперь я использую TableView для отображения некоторых из этих свойств. Модель Колонка определяется как следоватьJavaFX: Как сделать ячейки таблицы, чтобы быть в контингент значения другой ячейки таблицы

TableColumn<MyModel, String> tableColumn1 = new TableColumn<MyModel, String>("display 1"); 
TableColumn<MyModel, String> tableColumn2 = new TableColumn<MyModel, String>("display 2"); 

теперь TableColumn следовать образцу, используя значение ячейки завода, связанный с одной из собственности моей модели.

tableColumn1.setCellValueFactory((t)-> { 
       MyModel myModelValue = ((MyModel)t.getValue());  
       return myModelValue.getProperty3().equals("something") ? property1():property2(); 
      }); 

tableColumn2.setCellValueFactory((t)-> property3()); 

Проблема в следующем. Если property3 будет изменен где-то во время выполнения, он будет правильно инициировать изменение в столбце2 моей таблицы и обновлении пользовательского интерфейса ячейки. Но он ничего не сделает для столбца1, поскольку ни property1, и property2 не изменились. Как я могу каким-то образом заставить column1 изменить или слушать условную к изменению property3

благодаря

ответ

1
tableColumn1.setCellValueFactory(t -> { 
    MyModel myModelValue = t.getValue(); 
    return Bindings.when(myModelValue.property3().equals("something")) 
     .then(myModelValue.property1()) 
     .otherwise(myModelValue.property2()); 
}); 
+0

Ну, вы должны признать, что Java стала очень аккуратно! Спасибо, прекрасный ответ, я забыл эту функцию привязки «когда» – BlackLabrador

Смежные вопросы