Advertisement
Guest User

TableViewBug

a guest
Oct 20th, 2014
45
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import javafx.application.Application;
  2. import javafx.beans.property.SimpleStringProperty;
  3. import javafx.collections.FXCollections;
  4. import javafx.collections.ObservableList;
  5. import javafx.event.ActionEvent;
  6. import javafx.event.EventHandler;
  7. import javafx.geometry.Insets;
  8. import javafx.scene.Group;
  9. import javafx.scene.Scene;
  10. import javafx.scene.control.Button;
  11. import javafx.scene.control.Label;
  12. import javafx.scene.control.SelectionMode;
  13. import javafx.scene.control.TableColumn;
  14. import javafx.scene.control.TableColumn.CellEditEvent;
  15. import javafx.scene.control.TableView;
  16. import javafx.scene.control.TextField;
  17. import javafx.scene.control.cell.PropertyValueFactory;
  18. import javafx.scene.control.cell.TextFieldTableCell;
  19. import javafx.scene.layout.HBox;
  20. import javafx.scene.layout.VBox;
  21. import javafx.scene.text.Font;
  22. import javafx.stage.Stage;
  23.  
  24. public class TableViewSample extends Application {
  25.  
  26.     private TableView<Person> table = new TableView<Person>();
  27.     private final ObservableList<Person> data
  28.             = FXCollections.observableArrayList();
  29.     final HBox hb = new HBox();
  30.  
  31.     public static void main(String[] args) {
  32.         launch(args);
  33.     }
  34.  
  35.     @Override
  36.     public void start(Stage stage) {
  37.         Scene scene = new Scene(new Group());
  38.         stage.setTitle("Table View Sample");
  39.         stage.setWidth(450);
  40.         stage.setHeight(550);
  41.  
  42.         for (int i = 0; i < 1000; ++i) {
  43.             data.add(new Person(String.valueOf(i), "lol", "lol"));
  44.         }
  45.  
  46.         final Label label = new Label("Address Book");
  47.         label.setFont(new Font("Arial", 20));
  48.  
  49.         table.setEditable(true);
  50.         table.getSelectionModel().setCellSelectionEnabled(true);
  51.         table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
  52.  
  53.         TableColumn firstNameCol = new TableColumn("First Name");
  54.         firstNameCol.setMinWidth(100);
  55.         firstNameCol.setCellValueFactory(
  56.                 new PropertyValueFactory<Person, String>("firstName"));
  57.         firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
  58.         firstNameCol.setOnEditCommit(
  59.                 new EventHandler<CellEditEvent<Person, String>>() {
  60.                     @Override
  61.                     public void handle(CellEditEvent<Person, String> t) {
  62.                         ((Person) t.getTableView().getItems().get(
  63.                                 t.getTablePosition().getRow())).setFirstName(t.getNewValue());
  64.                     }
  65.                 }
  66.         );
  67.  
  68.         TableColumn lastNameCol = new TableColumn("Last Name");
  69.         lastNameCol.setMinWidth(100);
  70.         lastNameCol.setCellValueFactory(
  71.                 new PropertyValueFactory<Person, String>("lastName"));
  72.         lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
  73.         lastNameCol.setOnEditCommit(
  74.                 new EventHandler<CellEditEvent<Person, String>>() {
  75.                     @Override
  76.                     public void handle(CellEditEvent<Person, String> t) {
  77.                         ((Person) t.getTableView().getItems().get(
  78.                                 t.getTablePosition().getRow())).setLastName(t.getNewValue());
  79.                     }
  80.                 }
  81.         );
  82.  
  83.         TableColumn emailCol = new TableColumn("Email");
  84.         emailCol.setMinWidth(200);
  85.         emailCol.setCellValueFactory(
  86.                 new PropertyValueFactory<Person, String>("email"));
  87.         emailCol.setCellFactory(TextFieldTableCell.forTableColumn());
  88.         emailCol.setOnEditCommit(
  89.                 new EventHandler<CellEditEvent<Person, String>>() {
  90.                     @Override
  91.                     public void handle(CellEditEvent<Person, String> t) {
  92.                         ((Person) t.getTableView().getItems().get(
  93.                                 t.getTablePosition().getRow())).setEmail(t.getNewValue());
  94.                     }
  95.                 }
  96.         );
  97.  
  98.         table.setItems(data);
  99.         table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);
  100.  
  101.         final TextField addFirstName = new TextField();
  102.         addFirstName.setPromptText("First Name");
  103.         addFirstName.setMaxWidth(firstNameCol.getPrefWidth());
  104.         final TextField addLastName = new TextField();
  105.         addLastName.setMaxWidth(lastNameCol.getPrefWidth());
  106.         addLastName.setPromptText("Last Name");
  107.         final TextField addEmail = new TextField();
  108.         addEmail.setMaxWidth(emailCol.getPrefWidth());
  109.         addEmail.setPromptText("Email");
  110.  
  111.         final Button addButton = new Button("Add");
  112.         addButton.setOnAction(new EventHandler<ActionEvent>() {
  113.             @Override
  114.             public void handle(ActionEvent e) {
  115.                 data.add(new Person(
  116.                         addFirstName.getText(),
  117.                         addLastName.getText(),
  118.                         addEmail.getText()));
  119.                 addFirstName.clear();
  120.                 addLastName.clear();
  121.                 addEmail.clear();
  122.             }
  123.         });
  124.  
  125.         hb.getChildren().addAll(addFirstName, addLastName, addEmail, addButton);
  126.         hb.setSpacing(3);
  127.  
  128.         final VBox vbox = new VBox();
  129.         vbox.setSpacing(5);
  130.         vbox.setPadding(new Insets(10, 0, 0, 10));
  131.         vbox.getChildren().addAll(label, table, hb);
  132.  
  133.         ((Group) scene.getRoot()).getChildren().addAll(vbox);
  134.  
  135.         stage.setScene(scene);
  136.         stage.show();
  137.     }
  138.  
  139.     public static class Person {
  140.  
  141.         private final SimpleStringProperty firstName;
  142.         private final SimpleStringProperty lastName;
  143.         private final SimpleStringProperty email;
  144.  
  145.         private Person(String fName, String lName, String email) {
  146.             this.firstName = new SimpleStringProperty(fName);
  147.             this.lastName = new SimpleStringProperty(lName);
  148.             this.email = new SimpleStringProperty(email);
  149.         }
  150.  
  151.         public String getFirstName() {
  152.             return firstName.get();
  153.         }
  154.  
  155.         public void setFirstName(String fName) {
  156.             firstName.set(fName);
  157.         }
  158.  
  159.         public String getLastName() {
  160.             return lastName.get();
  161.         }
  162.  
  163.         public void setLastName(String fName) {
  164.             lastName.set(fName);
  165.         }
  166.  
  167.         public String getEmail() {
  168.             return email.get();
  169.         }
  170.  
  171.         public void setEmail(String fName) {
  172.             email.set(fName);
  173.         }
  174.     }
  175. }
Advertisement
Advertisement
Advertisement
RAW Paste Data Copied
Advertisement