簡體   English   中英

JavaFX TreeTableView自定義TreeCell與控件

[英]JavaFX TreeTableView custom TreeCell with controls

我是JavaFX 8的新手,並嘗試在第二列和第三列中使用一些jfxtras控件實現TreeTableView。 因此,我使用自定義TreeCells設置了這些列的單元格工廠,例如:

col3.setCellFactory(new Callback<TreeTableColumn<Object, String>, TreeTableCell<Object, String>>() {
        @Override
        public TreeTableCell<Object, String> call(TreeTableColumn<Object, String> param) {
            TreeTableCell<Object, String> cell = new TreeTableCell<Object, String>() {
                private ColorPicker colorPicker = new ColorPicker();
                @Override
                protected void updateItem(String t, boolean bln) {
                    super.updateItem(t, bln);               
                    setGraphic(colorPicker);                        
                }
            };
            return cell;
        }
    });

現在,我可以看到ColorPickers並可以使用它們了,但是該列對擴展或折疊第1列的節點(從POJO中顯示String信息)不起作用。 因此,例如,如果我折疊整棵樹,第三列仍顯示所有ColorPickers。

那么,使列“同步”還需要什么呢?

謝謝!!

當單元格顯示的項目更改時,將調用updateItem(...)方法。 如果單元格為空(例如,因為用戶折疊了上面的單元格),則第二個參數為true 您需要檢查並取消設置圖形。

所以:

col3.setCellFactory(new Callback<TreeTableColumn<Object, String>, TreeTableCell<Object, String>>() {
        @Override
        public TreeTableCell<Object, String> call(TreeTableColumn<Object, String> param) {
            TreeTableCell<Object, String> cell = new TreeTableCell<Object, String>() {
                private ColorPicker colorPicker = new ColorPicker();
                @Override
                protected void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty);  
                    if (empty) {
                        setGraphic(null);
                    } else {             
                        setGraphic(colorPicker);     
                    }                   
                }
            };
            return cell;
        }
    });

暫無
暫無

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

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