package bugs.table.fixed.RT22385;
import com.sun.javafx.collections.ObservableListWrapper;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TableViewLeaksMemory extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
FlowPane pane = new FlowPane(Orientation.VERTICAL);
TableView tableView = new TableView();
tableView.setItems(new ObservableListWrapper(Collections.singletonList(new Object())));
Button addButton = createAddButton(tableView);
Button removeButton = createRemoveButton(tableView);
pane.getChildren().add(tableView);
pane.getChildren().add(addButton);
pane.getChildren().add(removeButton);
stage.setScene(new Scene(pane));
stage.setHeight(500);
stage.show();
}
private Button createRemoveButton(final TableView tableView) {
Button removeButton = new Button("Remove Columns");
removeButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
int count = tableView.getColumns().size();
if (count >= 5) {
tableView.getColumns().remove(count - 5, count);
}
}
});
return removeButton;
}
private Button createAddButton(final TableView tableView) {
Button addButton = new Button("Add Columns");
addButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
tableView.getColumns().addAll(createFiveColumns());
}
});
return addButton;
}
private List<TableColumn> createFiveColumns() {
ArrayList<TableColumn> list = new ArrayList<>();
list.add(new TableColumn("1"));
list.add(new TableColumn("2"));
list.add(new TableColumn("3"));
list.add(new TableColumn("4"));
list.add(new TableColumn("5"));
return list;
}
}