【发布时间】:2017-02-25 18:02:16
【问题描述】:
我有一个 javafx 应用程序,它在单个流程窗格中包含许多按钮。为了使按钮可拖动,我将每个按钮放在一个单独的窗格中。用户可以从任何一个窗格中选择任何按钮并将其拖放到任何其他窗格上。例如,从窗格 1 中获取按钮并将其拖放到窗格 5 中。
由于以前不知道用户会选择哪个按钮,我假设它必须首先以某种方式添加到拖动板上,以便可以通过 setOnDragDropped 操作从拖动板中检索它。
我可以使用以下方法在图像视图之间拖放图像:
Dragboard db = iv_1.startDragAndDrop(TransferMode.MOVE);
ClipboardContent content = new ClipboardContent();
content.putImage(iv_1.getImage());
但我想不出一种将按钮添加到拖动板的方法,因为没有可用的特定选项,只有似乎不适用的选项 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();
}
【问题讨论】:
-
只是抛出想法。您能否复制按钮的重要细节并在该位置在拖动释放时创建一个新按钮。然后使用细节来确定按钮功能?
-
setId不会将按钮添加到窗格中。看javadocumentation。 -
startFullDrag+ 使用MouseDragEvent.getGestureSource。顺便说一句,用Dragboard转储这个想法。将Button拖到应用程序外部的某个地方没有意义,但Dragboard用于独立于源应用程序拖动数据... -
伙计们,非常感谢您的贡献.....
标签: button javafx drag-and-drop