import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.BorderPane; import javafx.scene.text.Font; import javafx.stage.Stage; import javafx.util.Callback; public class SimpleTableApp extends Application { private TableView tableView = new TableView(); private ObservableList dataList; Callback cellFactory = new Callback() { public TableCell call(TableColumn p) { return new EditingCell(); } }; public static void main(String[] args) { launch(args); } @Override public void start(Stage pStage) { // Data dataList = FXCollections.observableArrayList(); for (int i = 1; i <= 200000; i++) { dataList.add(new Record("Record: " + i, i)); } TableColumn tcolText = new TableColumn("Text"); tcolText.setCellValueFactory(new PropertyValueFactory("text")); TableColumn tcolValue = new TableColumn("Value"); tcolValue.setMinWidth(178.871); tcolValue.setCellValueFactory(new PropertyValueFactory("value")); tcolValue.setCellFactory(cellFactory); tableView.setItems(dataList); tableView.getColumns().addAll(tcolText, tcolValue); // Layout Button but = new Button("ScrollTo"); but.setOnAction(new EventHandler() { public void handle(ActionEvent arg0) { tableView.scrollTo(150000); } }); BorderPane bpane = new BorderPane(); bpane.setCenter(tableView); bpane.setBottom(but); pStage.setTitle("Simple TableView"); pStage.setScene(new Scene(bpane, 300, 400)); pStage.show(); } public class Record { private String sText; private double dValue; public Record(String pText, double pValue) { sText = pText; dValue = pValue; } public String getText() { return sText; } public double getValue() { return dValue; } } } class EditingCell extends TableCell { public EditingCell() { } @Override public void updateItem(Double item, boolean empty) { super.updateItem(item, empty); if (!isEmpty()) { int fontSize = 14 + 14 * getItem().intValue() / 200000; super.setFont(new Font(fontSize)); setText(getItem().toString()); setGraphic(null); } else { setText(null); setGraphic(null); } } }