Собственно, сабж. Вчера попытался - не вышло.
Кусок кода формирования колонок и привязки модели (на основе туториала на сайте оракла):
public class NomenclatureListController implements Initializable {
@FXML
private TableView<Map<String, String>> tableView_Nomenclature;
@FXML
private TreeView<String> treeView_Nomenclature;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
List<TableColumn<Map, String>> columnsData = new ArrayList<TableColumn<Map, String>>();
NomenaclatureList list = new NomenaclatureList();
List<String> columns = list.getColumns();
for (String colName : columns) {
TableColumn<Map, String> datacol = new TableColumn<>(colName); //TODO: must to be representation here
datacol.setCellValueFactory(new MapValueFactory(colName));
columnsData.add(datacol);
}
tableView_Nomenclature = new TableView<Map<String, String>>(list.getData(0, 0));
//tableView_Nomenclature.getColumns().addAll(columnsData);
for (TableColumn coldata : columnsData) {
tableView_Nomenclature.getColumns().add(coldata);
}
Callback<TableColumn<Map, String>, TableCell<Map, String>> cellFactoryForMap = new Callback<TableColumn<Map, String>, TableCell<Map, String>>() {
@Override
public TableCell<Map, String> call(TableColumn<Map, String> param) {
return new TextFieldTableCell(new StringConverter() {
@Override
public String toString(Object t) {
return t.toString();
}
@Override
public Object fromString(String string) {
return string;
}
});
}
};
for (TableColumn coldata : columnsData) {
coldata.setCellFactory(cellFactoryForMap);
}
}
}
public class NomenaclatureList implements DataModel {
private final String _CODE = "code";
private final String _NAME = "name";
@Override
public List<String> getColumns() {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
List<String> columns = new ArrayList<String>();
columns.add(_CODE);
columns.add(_NAME);
return columns;
}
@Override
public ObservableList<Map<String, String>> getData(int from, int to) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
ObservableList<Map<String, String>> data = FXCollections.observableArrayList();
Map<String, String> str1 = new HashMap<>();
str1.put(_CODE, "1");
str1.put(_NAME, "name1");
data.add(str1);
Map<String, String> str2 = new HashMap<>();
str2.put(_CODE, "2");
str2.put(_NAME, "name2");
data.add(str2);
return data;
}
}
К слову, этот код у меня не заполняет колонки в таблице и, соответственно, данных нет в таблице.