Guest User

Untitled

a guest
Feb 3rd, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.26 KB | None | 0 0
  1. import javafx.application.Application;
  2. import javafx.beans.property.SimpleBooleanProperty;
  3. import javafx.beans.property.SimpleObjectProperty;
  4. import javafx.beans.value.ChangeListener;
  5. import javafx.beans.value.ObservableValue;
  6. import javafx.collections.FXCollections;
  7. import javafx.collections.ObservableList;
  8. import javafx.event.EventHandler;
  9. import javafx.geometry.Insets;
  10. import javafx.geometry.Pos;
  11. import javafx.scene.Scene;
  12. import javafx.scene.control.TreeItem;
  13. import javafx.scene.control.TreeTableCell;
  14. import javafx.scene.control.TreeTableColumn;
  15. import javafx.scene.control.TreeTableView;
  16. import javafx.scene.control.cell.CheckBoxTreeTableCell;
  17. import javafx.scene.control.cell.ComboBoxTreeTableCell;
  18. import javafx.scene.control.cell.TreeItemPropertyValueFactory;
  19. import javafx.scene.layout.StackPane;
  20. import javafx.stage.Stage;
  21. import javafx.util.Callback;
  22.  
  23. public class TreeTableViewEditDemo extends Application {
  24.  
  25. @Override
  26. public void start(Stage stage) {
  27.  
  28. TreeTableView<Employee> treeTableView = new TreeTableView<Employee>();
  29. treeTableView.setEditable(true);
  30.  
  31. // Create column EmpNo (Data type of String).
  32. TreeTableColumn<Employee, String> empNoCol //
  33. = new TreeTableColumn<Employee, String>("Emp No");
  34.  
  35. // Create column FullName (Data type of String).
  36. TreeTableColumn<Employee, String> fullNameCol//
  37. = new TreeTableColumn<Employee, String>("Full Name");
  38.  
  39. // Create 2 sub column for FullName.
  40. TreeTableColumn<Employee, String> firstNameCol //
  41. = new TreeTableColumn<Employee, String>("First Name");
  42.  
  43. TreeTableColumn<Employee, String> lastNameCol //
  44. = new TreeTableColumn<Employee, String>("Last Name");
  45.  
  46. // Add sub columns to the FullName
  47. fullNameCol.getColumns().addAll(firstNameCol, lastNameCol);
  48.  
  49. // Gender Column
  50. TreeTableColumn<Employee, Gender> genderCol //
  51. = new TreeTableColumn<Employee, Gender>("Gender");
  52. genderCol.setMinWidth(90);
  53.  
  54. // Position Column
  55. TreeTableColumn<Employee, String> positionCol //
  56. = new TreeTableColumn<Employee, String>("Position");
  57.  
  58. // Single? Column
  59. TreeTableColumn<Employee, Boolean> singleCol//
  60. = new TreeTableColumn<Employee, Boolean>("Single?");
  61.  
  62. // Add columns to TreeTable.
  63. treeTableView.getColumns().addAll(empNoCol, fullNameCol, positionCol, genderCol, singleCol);
  64.  
  65. // Data
  66. Employee empBoss = new Employee("E00", "Abc@gmail.com", //
  67. "Boss", "Boss", "Manager", "M", false);
  68.  
  69. Employee empSmith = new Employee("E01", "Smith@gmail.com", //
  70. "Susan", "Smith", "Salesman", "F", true);
  71.  
  72. Employee empMcNeil = new Employee("E02", "McNeil@gmail.com", //
  73. "Anne", "McNeil", "Cleck", "M", false);
  74.  
  75. // Root Item
  76. TreeItem<Employee> itemRoot = new TreeItem<Employee>(empBoss);
  77. TreeItem<Employee> itemSmith = new TreeItem<Employee>(empSmith);
  78. TreeItem<Employee> itemMcNeil = new TreeItem<Employee>(empMcNeil);
  79.  
  80. itemRoot.getChildren().addAll(itemSmith, itemMcNeil);
  81. treeTableView.setRoot(itemRoot);
  82.  
  83. // Defines how to fill data for each cell.
  84. // Get value from property of Employee.
  85. empNoCol.setCellValueFactory(new TreeItemPropertyValueFactory<Employee, String>("empNo"));
  86. firstNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<Employee, String>("firstName"));
  87. lastNameCol.setCellValueFactory(new TreeItemPropertyValueFactory<Employee, String>("lastName"));
  88. positionCol.setCellValueFactory(new TreeItemPropertyValueFactory<Employee, String>("position"));
  89.  
  90. // GENDER (COMBO BOX).
  91. genderCol.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Employee, Gender>, //
  92. ObservableValue<Gender>>() {
  93.  
  94. @Override
  95. public ObservableValue<Gender> call(TreeTableColumn.CellDataFeatures<Employee, Gender> param) {
  96. TreeItem<Employee> treeItem = param.getValue();
  97. Employee emp = treeItem.getValue();
  98. // F,M
  99. String genderCode = emp.getGender();
  100. Gender gender = Gender.getByCode(genderCode);
  101. return new SimpleObjectProperty<Gender>(gender);
  102. }
  103. });
  104. ObservableList<Gender> genderList = FXCollections.observableArrayList(//
  105. Gender.values());
  106. genderCol.setCellFactory(ComboBoxTreeTableCell.forTreeTableColumn(genderList));
  107.  
  108. // After user edit on cell, update to Model.
  109. genderCol.setOnEditCommit(new EventHandler<TreeTableColumn.CellEditEvent<Employee, Gender>>() {
  110.  
  111. @Override
  112. public void handle(TreeTableColumn.CellEditEvent<Employee, Gender> event) {
  113. TreeItem<Employee> item = event.getRowValue();
  114. Employee emp = item.getValue();
  115. Gender newGender = event.getNewValue();
  116. emp.setGender(newGender.getCode());
  117. System.out.println("Single column commit. new gender:" +newGender);
  118. System.out.println("EMP:"+emp.isSingle());
  119. }
  120. });
  121.  
  122. // ==== SINGLE? (CHECK BOX) ===
  123. singleCol.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Employee, Boolean>, //
  124. ObservableValue<Boolean>>() {
  125.  
  126. @Override
  127. public ObservableValue<Boolean> call(TreeTableColumn.CellDataFeatures<Employee, Boolean> param) {
  128. TreeItem<Employee> treeItem = param.getValue();
  129. Employee emp = treeItem.getValue();
  130. SimpleBooleanProperty booleanProp= new SimpleBooleanProperty(emp.isSingle());
  131.  
  132. // Note: singleCol.setOnEditCommit(): Not work for
  133. // CheckBoxTreeTableCell.
  134. // When "Single?" column change.
  135. booleanProp.addListener(new ChangeListener<Boolean>() {
  136.  
  137. @Override
  138. public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue,
  139. Boolean newValue) {
  140. emp.setSingle(newValue);
  141. }
  142. });
  143. return booleanProp;
  144. }
  145. });
  146.  
  147.  
  148. singleCol.setCellFactory(new Callback<TreeTableColumn<Employee,Boolean>,TreeTableCell<Employee,Boolean>>() {
  149. @Override
  150. public TreeTableCell<Employee,Boolean> call( TreeTableColumn<Employee,Boolean> p ) {
  151. CheckBoxTreeTableCell<Employee,Boolean> cell = new CheckBoxTreeTableCell<Employee,Boolean>();
  152. cell.setAlignment(Pos.CENTER);
  153. return cell;
  154. }
  155. });
  156.  
  157. //
  158. StackPane root = new StackPane();
  159. root.setPadding(new Insets(5));
  160. root.getChildren().add(treeTableView);
  161.  
  162. stage.setTitle("TreeTableView (o7planning.org)");
  163.  
  164. Scene scene = new Scene(root, 450, 300);
  165. stage.setScene(scene);
  166. stage.show();
  167. }
  168.  
  169. public static void main(String[] args) {
  170. launch(args);
  171. }
  172.  
  173.  
  174.  
  175.  
  176. public class Employee {
  177.  
  178. private String empNo;
  179. private String firstName;
  180. private String lastName;
  181. private String email;
  182. private String position;
  183. private String gender;
  184.  
  185. private boolean single;
  186.  
  187. public Employee(String empNo, String email, //
  188. String firstName, String lastName, String position, String gender, boolean single) {
  189. this.empNo = empNo;
  190. this.email = email;
  191. this.firstName = firstName;
  192. this.lastName = lastName;
  193. this.position = position;
  194. this.gender = gender;
  195. this.single = single;
  196. }
  197.  
  198. public String getEmpNo() {
  199. return empNo;
  200. }
  201.  
  202. public void setEmpNo(String empNo) {
  203. this.empNo = empNo;
  204. }
  205.  
  206. public String getEmail() {
  207. return email;
  208. }
  209.  
  210. public void setEmail(String email) {
  211. this.email = email;
  212. }
  213.  
  214. public String getFirstName() {
  215. return firstName;
  216. }
  217.  
  218. public void setFirstName(String firstName) {
  219. this.firstName = firstName;
  220. }
  221.  
  222. public String getLastName() {
  223. return lastName;
  224. }
  225.  
  226. public void setLastName(String lastName) {
  227. this.lastName = lastName;
  228. }
  229.  
  230. public String getPosition() {
  231. return position;
  232. }
  233.  
  234. public void setPosition(String position) {
  235. this.position = position;
  236. }
  237.  
  238. public String getGender() {
  239. return gender;
  240. }
  241.  
  242. public void setGender(String gender) {
  243. this.gender = gender;
  244. }
  245.  
  246. public boolean isSingle() {
  247. return single;
  248. }
  249.  
  250. public void setSingle(boolean single) {
  251. this.single = single;
  252. }
  253. }
  254.  
  255.  
  256.  
  257. public enum Gender {
  258. FEMALE("F", "Famale"), MALE("M", "Male");
  259.  
  260. private String code;
  261. private String text;
  262.  
  263. private Gender(String code, String text) {
  264. this.code = code;
  265. this.text = text;
  266. }
  267.  
  268. public String getCode() {
  269. return code;
  270. }
  271.  
  272. public String getText() {
  273. return text;
  274. }
  275.  
  276. public static Gender getByCode(String genderCode) {
  277. for (Gender g : Gender.values()) {
  278. if (g.code.equals(genderCode)) {
  279. return g;
  280. }
  281. }
  282. return null;
  283. }
  284.  
  285. @Override
  286. public String toString() {
  287. return this.text;
  288. }
  289. }
  290. }
Add Comment
Please, Sign In to add comment