import static javafx.collections.FXCollections.observableArrayList;

import java.util.List;

import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public final class Test extends Application
{
    public static void main(String[] args)
    {
        launch();
    }

    @Override
    public void start(Stage stage)
    {
        var textField = new TextField("Initial Data");
        var button = new Button("Refresh table");
        var tableColumn = new TableColumn<TextField,String>("TextField's Text");
        var tableView = new TableView<>(observableArrayList(List.of(textField)));
        var tab = new Tab("Table", tableView);
        var tabPane = new TabPane(tab);
        var vbox = new VBox(
                textField,
                button,
                tabPane
        );

        vbox.setStyle("-fx-padding: 20; -fx-spacing: 20; -fx-alignment: center;");

        button.setOnAction(x -> tableView.refresh());

        tableColumn.setCellValueFactory(f -> new SimpleStringProperty(f.getValue().getText()));
        tableColumn.setPrefWidth(150);

        tableView.getColumns().add(tableColumn);

        stage.setTitle("Table refresh bug");
        final Scene scene = new Scene(new StackPane(vbox), 400, 300);
        stage.setScene(scene);
        stage.show();
    }
}