2013-03-18 2 views
3

Я новичок в ScalaFX. Я пытаюсь адаптировать базовый пример TableView, чтобы включить столбцы Integer.Целочисленные столбцы в ScalaFX TableView

До сих пор я придумал следующий код:

class Person(firstName_ : String, age_ : Int) { 
    val name = new StringProperty(this, "Name", firstName_) 
    val age = new IntegerProperty(this, "Age", age_) 
} 

object model{ 
    val dataSource = new ObservableBuffer[Person]() 
    dataSource += new Person("Moe", 45) 
    dataSource += new Person("Larry", 43) 
    dataSource += new Person("Curly", 41) 
    dataSource += new Person("Shemp", 39) 
    dataSource += new Person("Joe", 37) 
} 

object view{ 
    val nameCol = new TableColumn[Person, String]{ 
    text = "Name" 
    cellValueFactory = {_.value.name} 
    } 

    val ageCol = new TableColumn[Person, Int]{ 
    text = "Age" 
    cellValueFactory = {_.value.age} 
    } 
} 

object TestTableView extends JFXApp { 
    stage = new PrimaryStage { 
    title = "ScalaFx Test" 
    width = 800; height = 500 
    scene = new Scene {  
     content = new TableView[Person](model.dataSource){ 
     columns += view.nameCol 
     columns += view.ageCol 
     } 
    } 
    } 
} 

Проблема заключается в том, что, в то время как nameCol работает хорошо, ageCol не даже компиляции.

В строке cellValueFactory = {_.value.age}, я получаю ошибку несоответствия типа. Ожидается, что ObservableValue[Int,Int] получит IntegerProperty.

Я использую ScalaFX 1.0 M2, скомпилированный для Scala 2.10.

ответ

3

Изменение IntegerProperty в ScalaFX ObjectProperty[Int], просто:

val age = ObjectProperty(this, "Age", age_) 

Остальные могут остаться тем же самым.

+2

Спасибо! Не могли бы вы рассказать немного о том, почему это происходит? – Eduardo

0

так попробовать ...

TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name"); 

или табличного действия

TableColumn<Person, Boolean> actionCol = new TableColumn<>("Action"); 
actionCol.setSortable(false); 
actionCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Boolean>, ObservableValue<Boolean>>() { 
    @Override public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<Person, Boolean> features) { 
    return new SimpleBooleanProperty(features.getValue() != null); 
    } 
}); 
Смежные вопросы