簡體   English   中英

自定義組件擴展JavaFX 8 TreeTableView

[英]Custom Component extending JavaFX 8 TreeTableView

我有一個類MyTreeTableView擴展TreeTableView

我通過在派生類中傳遞一個可觀察的列表來實現一些方法來填充樹視圖,而原始TreeTableView中不提供此列表。 除此之外,沒有其他功能。

我可以使用此類,並且在使用Java進行編碼時可以按預期工作

MyTreeTableView localtree = new MyTreeTableView(new TreeItem<>());
localtree.setItems(myobservedList);

如果將這個實例添加到場景中,那么一切都將像標准TreeTableView一樣工作。要將該實例添加到場景中,我必須在Java端執行此操作。

我必須將我的類MyTreeTableView放入自定義FXML組件中,以便可以使用場景生成器對其進行訪問,以便於輕松拖放。

在嘗試FXML的自定義組件方面之前,我嘗試將localtreetable分配給標准Java FX 8 TreeTableView,該標准在FXML中定義並且是現有場景的一部分。

我做了以下

localtreetable.getColumns().addAll(col1,col2);
        localtreetable.setShowRoot(false);
        localtreetable.setItems(myobservedList);
        JavaFX8TreeTableView.setRoot(localtreetable.getRoot());
        col1 = (TreeTableColumn<Object, String>) JavaFX8TreeTableView.getColumns().get(0);
        col2 = (TreeTableColumn<Object, String>) JavaFX8TreeTableView.getColumns().get(1);

//setCellValueFactory and CellFactories for col1 and col2 after this.

這里的col1col2在FXML中定義,它們是JavaFX8TreeTableView的列,該列也在FXML中定義。

有了這種技巧,JavaFX8TreeTableView就會在UI中顯示,並且數據會填充在localtreetable對象中。 但是,UI的使用方向不正確,樹形視圖被弄亂了。 當我說混亂時,樹的順序正確,但是>放在樹項目的第4個字母上,並且單擊箭頭不會展開或關閉樹項目,您必須在其他位置單擊它展開和關閉它的位置。 在此處輸入圖片說明 我的第一個問題是如何將值從localtreetable轉換為JavaFx8TreeTableView,以便可以將值填充到已經定義的TreeTableView中

遷移到Java8時,在JavaFX 2.2中存在一個錯誤,同時填充TreeItem,branchExpand和branchCollapse事件,一些空TreeItem的積淀也被累加了。 您可以通過顯式編寫setGraphic(null);來修復該錯誤。 setText(null); 在updateItem函數中

public void updateItem(String item,boolean empty){super.updateItem(item,empty);

        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            if (isEditing()) {
                if (textField != null) {
                    textField.setText(getString());
                }
                setText(null);
                setGraphic(textField);
            } else {
                setText(getString());
                setGraphic(getTreeItem().getGraphic());
                if (
                    !getTreeItem().isLeaf()&&getTreeItem().getParent()!= null
                ){
                    setContextMenu(addMenu);
                }
            }
        }

請參閱http://docs.oracle.com/javase/8/javafx/user-interface-tutorial/tree-view.htm#BABDEADA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM