我在javafx应用程序中使用树视图,今天我添加了拖放支持以重新排列树视图的元素。为此,我必须创建自己的CellFactory类,但是我的代码存在错误。 当我的树视图的内容变小时,树视图下应为空的区域仍包含不应包含的文本。
这是折叠前和折叠后我的树状视图的样子:
此博客文章的拖放功能给了我灵感 https://brianyoung.blog/2018/08/23/javafx-treeview-drag-drop/
在拥有自己的cellFactory类之前,我在树形视图的setCellFactory方法中具有一个lambda函数,并且该解决方案没有此问题。
在CellFactory类中,我重写了call方法。我认为这是我需要以某种方式刷新treeview的内容以摆脱残留文本的地方。
public class CellFactory implements Callback<TreeView<QuizElement>, TreeCell<QuizElement>> {
...
@Override
public TreeCell<QuizElement> call(TreeView<QuizElement> treeView) {
TreeCell<QuizElement> cell = new TreeCell<QuizElement>() {
@Override
protected void updateItem(QuizElement item, boolean empty) {
super.updateItem(item, empty);
if (item == null) return;
if (empty) {
setText("");
} else {
textProperty().bind(item.getNameProperty());
}
}
};
cell.setOnDragDetected((MouseEvent event) -> dragDetected(event, cell));
cell.setOnDragOver((DragEvent event) -> dragOver(event, cell));
cell.setOnDragDropped((DragEvent event) -> drop(event, cell, treeView));
cell.setOnDragDone((DragEvent event) -> clearDropLocation());
return cell;
}
...
在折叠后的图片中,我希望最后一个可打开元素下面的区域为白色。