import javafx.application.Application; 
import javafx.beans.property.SimpleStringProperty; 
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.Button; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 
 
public class Main extends Application { 
 
    private TableView<Person> table = new TableView<Person>(); 
    private final ObservableList<Person> data = 
        FXCollections.observableArrayList( 
            new Person("A", "Z", "[email protected]"), 
            new Person("B", "X", "[email protected]"), 
            new Person("C", "W", "[email protected]"), 
            new Person("D", "Y", "[email protected]"), 
            new Person("E", "V", "[email protected]") 
        );    
 
    public static void main(String[] args) { 
        launch(args); 
    } 
 
    @Override public void start(Stage stage) { 
        Scene scene = new Scene(new Group()); 
        stage.setWidth(400); 
        stage.setHeight(550); 
 
        table.setEditable(true); 
        
        TableColumn firstNameCol = new TableColumn("First Name"); 
        firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName")); 
 
        TableColumn lastNameCol = new TableColumn("Last Name"); 
        lastNameCol.setCellValueFactory( 
            new PropertyValueFactory<Person,String>("lastName") 
        ); 
 
        TableColumn emailCol = new TableColumn("Email"); 
        emailCol.setMinWidth(200); 
        emailCol.setCellValueFactory( 
            new PropertyValueFactory<Person,String>("email") 
        ); 
                                      
        table.setItems(data); 
        table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); 
      
        final Button addButton = new Button("Add"); 
        addButton.setOnAction(new EventHandler<ActionEvent>() { 
            @Override public void handle(ActionEvent e) { 
                data.add(new Person("new","new","new")); 
            } 
        }); 
         
         
        final VBox vbox = new VBox(); 
        vbox.setSpacing(5); 
        vbox.setPadding(new Insets(10, 0, 0, 10)); 
        vbox.getChildren().addAll(table,addButton); 
 
        ((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); 
        } 
        
    } 
    
} 
 
    
   |     
 
 |