package javaapplication49; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.MapValueFactory; import javafx.scene.control.cell.TextFieldTableCell; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.util.Callback; import javafx.util.StringConverter; /** * @author Alexander Kirov */ public class MapTableSample extends Application { public static final String Column1MapKey = "Data1"; public static final String Column2MapKey = "Data2"; public static final List ContentOfMaps = new ArrayList<>(); public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { Scene scene = new Scene(new Group()); stage.setTitle("Table View Sample"); stage.setWidth(300); stage.setHeight(500); TableColumn firstDataColumn = new TableColumn<>("Data One"); TableColumn secondDataColumn = new TableColumn<>("Data Two"); firstDataColumn.setCellValueFactory(new MapValueFactory(Column1MapKey)); secondDataColumn.setCellValueFactory(new MapValueFactory(Column2MapKey)); TableView table_view = new TableView<>(generateDataInMap()); table_view.setEditable(true); table_view.getSelectionModel().setCellSelectionEnabled(true); table_view.getColumns().setAll(firstDataColumn, secondDataColumn); Callback, TableCell> cellFactoryForMap = new Callback, TableCell>() { @Override public TableCell call(TableColumn p) { return new TextFieldTableCell(new StringConverter() { @Override public String toString(Object t) { return t.toString(); } @Override public Object fromString(String string) { return string; } }); } }; firstDataColumn.setCellFactory(cellFactoryForMap); secondDataColumn.setCellFactory(cellFactoryForMap); final VBox vbox = new VBox(); vbox.setSpacing(5); vbox.setPadding(new Insets(10, 0, 0, 10)); vbox.getChildren().addAll(table_view); ((Group) scene.getRoot()).getChildren().addAll(vbox); stage.setScene(scene); stage.show(); } private ObservableList generateDataInMap() { int max = 10; ContentOfMaps.clear(); ObservableList allData = FXCollections.observableArrayList(); for (int i = 0; i < max; i++) { Map dataRow = new HashMap<>(); String key1 = Column1MapKey; String key2 = Column2MapKey; String value1 = "Stored data 1 - " + i; String value2 = "Stored data 2 - " + i; dataRow.put(key1, value1); dataRow.put(key2, value2); allData.add(dataRow); } return allData; } }