利用JavaFx开发RIA桌面应用-文件拖拽

2017-01-13 15:00:47来源:csdn作者:loongshawn人点击

第七城市

转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/53023429

1 背景

给JavaFx中的TextField控件添加文件拖拽功能,即实现将文件或文件夹拖拽至TeuxtField中,TextField显示出相应的路径地址。

2 监听器

在JavaFX中关于拖放操作,可以设置这么几种事件监听器:


setOnDragDetected(new EventHandler());当你从一个Node上进行拖动的时候,会检测到拖动操作,将会执行这个EventHandler。


setOnDragEntered(new EventHandler()); 当你拖动到目标控件的时候,会执行这个事件回调。


setOnDragExited(new EventHandler()); 当你拖动移出目标控件的时候,执行这个操作。


setOnDragOver(new EventHandler()); 当你拖动到目标上方的时候,会不停的执行。


setOnDragDropped(new EventHandler()); 当你拖动到目标并松开鼠标的时候,执行这个DragDropped事件。


setOnDragDone(new EventHandler()); 当你拖动并松手的时候,执行Drag完成操作。


这里要注意的是,首先执行拖动,拖动到目标控件的时候,会首先执行DragEnter,这个只执行一遍。然后当你停留在目标控件上方的时候,会不停的指定DragOver操作。

大家依据实际操作对不同环节的拖拽动作进行取舍。

3 实现

首先创建一个TextField的单例类,类中提供了一个getTextFiled方法获取TextField对象。

/**
* Created by loongshawn on 2016/11/3.
*
* NOTE 路径输入框拖入事件
*/
public class MyStyleTextField {private static MyStyleTextField uniqueInstance = null;private MyStyleTextField(){}public static MyStyleTextField getInstance(){if (uniqueInstance == null){
uniqueInstance = new MyStyleTextField();
}
return uniqueInstance;
}public TextField getTextFiled(){TextField textField = new TextField();textField.setOnDragOver(new DragOverEvent(textField));
textField.setOnDragDropped(new DragDroppedEvent(textField));return textField;
}}

接下来需要给这个TextField对象添加拖拽事件监听,即上述代码中的:

textField.setOnDragOver(new DragOverEvent(textField));
textField.setOnDragDropped(new DragDroppedEvent(textField));

本例中只需要添加两个响应事件即:1、文件拖到控件上方;2、鼠标按钮松开


setOnDragOver(new EventHandler());
setOnDragDropped(new EventHandler());

具体事件监听代码:

/**
* Created by loongshawn 2016/11/3.
*
* NOTE 文件拖到控件上方事件
*/
public class DragOverEvent implements EventHandler<DragEvent> {private TextField textField;public DragOverEvent(TextField textField){
this.textField = textField;
}public void handle(DragEvent event) {if (event.getGestureSource() != textField){
event.acceptTransferModes(TransferMode.ANY);
}
}
}/**
* Created by loongshawn 2016/11/3.
*
* NOTE 文件拖到控件上方,鼠标松开事件
*/
public class DragDroppedEvent implements EventHandler<DragEvent> {private static final Logger logger = Logger.getLogger(DragDroppedEvent.class);private TextField textField;public DragDroppedEvent(TextField textField){
this.textField = textField;
}public void handle(DragEvent event) {
Dragboard dragboard = event.getDragboard();
if (dragboard.hasFiles()){
try {
File file = dragboard.getFiles().get(0);
if (file != null) {
textField.setText(file.getAbsolutePath());
}
}catch (Exception e){
logger.debug(e.toString());
}
}
}
}

相关文章:


《 利用JavaFx开发RIA桌面应用-TableView操作》
《 利用JavaFx开发RIA桌面应用-Clipboard剪贴板操作》
《利用JavaFx开发RIA桌面应用-TextField替换PasswordField做密码框》
《利用JavaFx开发RIA桌面应用-半透明界面设计》
《利用JavaFx开发RIA桌面应用-加载等待界面设计》
《利用JavaFx开发RIA桌面应用-文件拖拽》
《利用JavaFx开发RIA桌面应用-改变stage的标题栏的图标》
《利用JavaFx开发RIA桌面应用-事件监听》
《利用JavaFx开发RIA桌面应用-ComboBox组合编辑框水平增长》
《利用JavaFx开发RIA桌面应用-布局说明》
《利用JavaFx开发RIA桌面应用-在线资料》
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台