我有一个javafx应用程序,其中包含一个单独的窗格内的多个按钮。为了使按钮可拖动,我已将每个按钮放在单独的窗格中。用户可以从任何一个窗格中选择任何按钮,然后将其拖放到任何其他窗格上。例如,从窗格1获取按钮并将其拖放到窗格5内部。JavaFX从一个窗格拖动到另一个窗口
由于先前未知用户将选择哪个按钮,因此我认为它必须先以某种方式添加到拖动板,所以它可以从setOnDragDropped操作的拖拽板中检索。
我能拖,并通过使用拖放imageviews之间的图像:
Dragboard db = iv_1.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
content.putImage(iv_1.getImage());
但我不能想出一个办法,以一个按钮添加到dragboard,因为没有具体的可供选择,只选项似乎并不适用,content.putText或content.putString()...
任何帮助,将不胜感激。这是我到目前为止有:
private void btn_1_setOnDragDetected(MouseEvent event) {
Dragboard db = btn_1.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
// below seems to be wrong
content.put(dataFormat,btn_1.toString());
db.setContent(content);
event.consume();
}
private void btn_1_setOnDragOver(DragEvent event) {
if (event.getGestureSource() != btn_1 &&
event.getDragboard().hasString()) {
event.acceptTransferModes(TransferMode.MOVE);
}
event.consume();
}
private void pane_5_setOnDragDropped(DragEvent event) {
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
// below must be wrong
pane_5.setId(db.getString());
success = true;
}
event.setDropCompleted(success);
event.consume();
}
仅仅抛出的想法。你可以复制按钮的重要细节,并在该位置的拖动释放上创建一个新按钮。然后使用细节来确定按钮功能? – Sedrick
'setId'不会将按钮添加到窗格。查看java [documentation](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#getId--)。 – theKidOfArcrania
['startFullDrag'](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#startFullDrag--)+使用['MouseDragEvent.getGestureSource'](https:/ /docs.oracle.com/javase/8/javafx/api/javafx/scene/input/MouseDragEvent.html#getGestureSource--)。顺便说一句,用“Dragboard”转储这个想法。将'Button'拖到应用程序外的某处并不合适,但“Dragboard”用于独立于源应用程序拖动数据... – fabian