gpt4 book ai didi

javafx - TreeTableView 拖放

转载 作者:行者123 更新时间:2023-12-02 02:24:23 28 4
gpt4 key购买 nike

我正在使用 TreeTableView 来显示树的内容。树中的排序顺序是手动的,我希望能够拖放项目。

如何在 TreeTableView 中拖放项目?

最佳答案

一种方法是使用“treeTableView.setRowFactory”。在“call”方法中,您创建一行,将“onDragDetected”、“onDragDropped”等附加到该行。请参阅下面的示例。

// Create the root, RowContainer is your class contianing row attributes
TreeItem<RowContainer> rootTIFX = new TreeItem<RowContainer>(rowContainerRoot);

// Add leaves under your root.
...

// Create the row factory
treeTableView.setRowFactory(new Callback<TreeTableView, TreeTableRow<RowContainer>>() {
@Override
public TreeTableRow<RowContainer> call(final TreeTableView param) {
final TreeTableRow<RowContainer> row = new TreeTableRow<RowContainer>();

row.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
// drag was detected, start drag-and-drop gesture
TreeItem<RowContainer> selected = (TreeItem<RowContainer>) treeTableView.getSelectionModel().getSelectedItem();
// to access your RowContainer use 'selected.getValue()'

if (selected != null) {
Dragboard db = treeTableView.startDragAndDrop(TransferMode.ANY);

// create a miniature of the row you're dragging
db.setDragView(row.snapshot(null, null));

// Keep whats being dragged on the clipboard
ClipboardContent content = new ClipboardContent();
content.putString(selected.getValue().getName());
db.setContent(content);

event.consume();
}
}
});
row.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
// data is dragged over the target
Dragboard db = event.getDragboard();
if (event.getDragboard().hasString()){
event.acceptTransferModes(TransferMode.MOVE);
}
event.consume();
}});
row.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {

Dragboard db = event.getDragboard();
boolean success = false;
if (event.getDragboard().hasString()) {

if (!row.isEmpty()) {
// This is were you do your magic.
// Move your row in the tree etc
// Here is two examples of how to access
// the drop destination:
int dropIndex = row.getIndex();
TreeItem<RowContainer> droppedon = row.getTreeItem();

success = true;
}
}
event.setDropCompleted(success);
event.consume();
}});
return row;
}
});

关于javafx - TreeTableView 拖放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32278942/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com