import javafx.application.Application; import javafx.application.Platform; import javafx.beans.property.SimpleStringProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.text.Font; import javafx.stage.Stage; public class TableViewSample extends Application { private TableView table = new TableView(); private final ObservableList data = FXCollections.observableArrayList( new Person("Jacob", "Smith", "jacob.smith@example.com"), new Person("Isabella", "Johnson", "isabella.johnson@example.com"), new Person("Ethan", "Williams", "ethan.williams@example.com"), new Person("Emma", "Jones", "emma.jones@example.com"), new Person("Michael", "Brown", "michael.brown@example.com") ); 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(450); stage.setHeight(600); final Label label = new Label("Address Book"); label.setFont(new Font("Arial", 20)); table.setEditable(true); table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); final TableColumn firstNameCol = new TableColumn("First Name"); firstNameCol.setMinWidth(100); firstNameCol.setCellValueFactory(new PropertyValueFactory("firstName")); final TableColumn lastNameCol = new TableColumn("Last Name"); lastNameCol.setMinWidth(100); lastNameCol.setCellValueFactory(new PropertyValueFactory("lastName")); final TableColumn emailCol = new TableColumn("Email"); emailCol.setMinWidth(200); emailCol.setCellValueFactory(new PropertyValueFactory("email")); table.setItems(data); for (int i = 0; i < 20; i++) { table.getItems().add(new Person("name " + i, "ln " + i, "email " + i)); } table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); firstNameCol.setSortable(false); table.getSortOrder().clear(); table.getSortOrder().add(emailCol); final VBox vbox = new VBox(); vbox.setSpacing(5); vbox.setPadding(new Insets(10, 0, 0, 10)); vbox.getChildren().addAll(label, table); ComboBox orders = new ComboBox(); orders.getItems().addAll(TableColumn.SortType.values()); orders.valueProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observableValue, TableColumn.SortType oldValue, TableColumn.SortType value) { emailCol.setSortType(value); } }); HBox hb = new HBox(); hb.getChildren().add(new Label("Sort order:")); hb.getChildren().add(orders); vbox.getChildren().add(hb); Button add = new Button("Action"); add.setOnAction(new EventHandler() { @Override public void handle(ActionEvent actionEvent) { table.getColumns().add(firstNameCol); //table.getColumns().clear(); // if (table.getItems().isEmpty()) return; // // table.getItems().remove(0); } }); vbox.getChildren().add(add); ((Group) scene.getRoot()).getChildren().addAll(vbox); stage.setScene(scene); stage.show(); } public static class Person { private final SimpleStringProperty firstName; private final SimpleStringProperty lastName; private final SimpleStringProperty email; private Person(String fName, String lName, String email) { this.firstName = new SimpleStringProperty(fName); this.lastName = new SimpleStringProperty(lName); this.email = new SimpleStringProperty(email); } public String getFirstName() { return firstName.get(); } public void setFirstName(String fName) { firstName.set(fName); } public String getLastName() { return lastName.get(); } public void setLastName(String fName) { lastName.set(fName); } public String getEmail() { return email.get(); } public void setEmail(String fName) { email.set(fName); } } }