JavaFX的樹狀表格物件由以下類別所組成:
- javafx.scene.control.TreeTableView
- javafx.scene.control.TreeTableColumn
- javafx.scene.control.TreeTableRow
- javafx.scene.control.TreeTableCell
- javafx.scene.control.cell.CheckBoxTreeTableCell
- javafx.scene.control.cell.ChoiceBoxTreeTableCell
- javafx.scene.control.cell.ComboBoxTreeTableCell
- javafx.scene.control.cell.TextFieldTreeTableCell
// 建立根節點 TreeItem<String> treeRoot = new TreeItem<>("Root node"); // 設定節點的展開狀態 treeRoot.setExpanded(true); ...接著以TreeItem類別建立子節點,並以TreeItem類別的getChildren().add()或getChildren().addAll()方法依序將子節點加入至根節點之中:
// 建立子節點 TreeItem<String> treeItem1 = new TreeItem<>("Profile"); TreeItem<String> treeItem2 = new TreeItem<>("Course"); TreeItem<String> treeItem3 = new TreeItem<>("Publication"); TreeItem<String> treeItem4 = new TreeItem<>("Book"); TreeItem<String> treeItem5 = new TreeItem<>("Project"); // 依序將子節點加入至根節點之中 treeRoot.getChildren().addAll( treeItem1, treeItem2, treeItem3, treeItem4, treeItem5); ...待建立樹狀物件之後,則以TreeTableColumn類別設定直行的相關屬性如直行標題,本範例僅設定一直行:
// 設定直行標題 TreeTableColumn<String,String> treeTableColumn = new TreeTableColumn<>("Vita"); // 設定直行屬性 treeTableColumn.setCellValueFactory( (CellDataFeatures<String,String> p) -> new ReadOnlyStringWrapper(p.getValue().getValue())); ...最後以TreeTableView類別的getColumns().add()或getColumns().addAll()方法依序將直行加入至樹狀表格之中:
// 建立TreeTableView物件 TreeTableView<String> treeTableView = null; treeTableView = new TreeTableView<>(treeRoot); // 依序將直行加入至樹狀表格之中 treeTableView.getColumns().add(treeTableColumn); // 設定是否顯示根節點 treeTableView.setShowRoot(true); // 設定是否可以選擇樹狀表格單元 treeTableView.getSelectionModel().setCellSelectionEnabled(false); // 設定複選模式 treeTableView.getSelectionModel().setSelectionMode( SelectionMode.MULTIPLE); // 設定直行的調整原則 treeTableView.setColumnResizePolicy( TreeTableView.CONSTRAINED_RESIZE_POLICY); // 設定是否顯示樹狀表格選單按鈕 treeTableView.setTableMenuButtonVisible(true); ...【執行結果】
除了上述範例的建立方式之外,亦可以陣列的方式處理多直行的樹狀表格單元。首先自定Department類別以建立節點陣列:
// 自定Department類別 public class Department { private SimpleStringProperty faculty; private SimpleStringProperty position; private SimpleStringProperty email; private SimpleStringProperty office; private SimpleStringProperty phone; public Department(String _faculty, String _position, String _email, String _office, String _phone) { this.faculty = new SimpleStringProperty(_faculty); this.position = new SimpleStringProperty(_position); this.email = new SimpleStringProperty(_email); this.office = new SimpleStringProperty(_office); this.phone = new SimpleStringProperty(_phone); } public SimpleStringProperty facultyProperty() { if (faculty == null) { faculty = new SimpleStringProperty(this, "faculty"); } return faculty; } ... public String getFaculty() { return faculty.get(); } public void setFaculty(String _faculty) { faculty.set(_faculty); } ... } ...以此自定的Department類別建立節點陣列:
// 建立節點陣列 ObservableList<Department> department = FXCollections.observableArrayList( new Department("Athena", "Associate Professor", "athena@edu.tw", "725", "6400"), new Department("Leo", "Associate Professor", "leo@edu.tw", "813", "6506"), new Department("Teresa", "Professor", "teresa@edu.tw", "825", "4059"), ...); ...【執行結果】
【參考資料】
[1] Java Official Web Site:http://www.oracle.com/technetwork/java/index.html
[2] JavaFX:http://www.oracle.com/technetwork/java/javafx
[3] JavaFX 8.0 API Specification.
[4] Java Platform, Standard Edition 8 API Specification.
© Chia-Hui Huang
哇…我喜歡這個!!!
回覆刪除請教一下…root除了用css之外,可以用java直接設定嗎?
哈…變相做一個Label,貼上底圖就OK了…
回覆刪除Dear Linuxice
刪除可參考上述範例建立一個直行或兩個以上直行的樹狀表格,不過兩種方式不太一樣
Thanks a lot.
Leo
作者已經移除這則留言。
回覆刪除做了一個RGB換色的程式…原始碼:
回覆刪除https://drive.google.com/file/d/0B2z0BtOkkf7gZC00OThscDR3NlU/view?usp=sharing
Dear Linuxice
刪除感謝你的分享 讚喔
Thanks a lot.
Leo
哈…謝謝您的錯愛♥
刪除其實小弟也很感謝您,不厭其煩的回答,也很感謝您的書…
如果JavaFX8的書沒出真的很可惜…可以直接跟您買嗎?哈…開玩笑的
Dear Linuxice
刪除互相交流而已,不算什麼,不過開學之後比較忙,無法一一回答,請見諒
JavaFX8有書商要出了,正在排版中
Leo