Hier habe ich einen Textbereich namens sourceTx, in den ich Dateien ziehe und ablege, dann lese ich den Inhalt dieser Datei mit BufferedReader. Wie Sie aus dem untenstehenden Code sehen können, habe ich die Datei, aus der ich den Inhalt lese, mit absolutepath angegeben.
Wenn ich also eine .txt-Datei ziehe und ablege, funktioniert es, der Inhalt wird gelesen und in den Textbereich eingefügt, aber wenn ich zum Beispiel einen Ordner ziehe und ablege, wird auch der Inhalt gelesen und in den Textbereich eingefügt.
Ich möchte diese Drag & Drop-Funktion also so einstellen, dass sie nur .txt-Dateien liest? Wie kann ich das erreichen?
Hier ist der Code für diese Methode:
public void dragDrop(){
sourceTx.setOnDragOver(new EventHandler <DragEvent>() {
@Override
public void handle(DragEvent event) {
Dragboard db = event.getDragboard();
if(db.hasFiles()){
event.acceptTransferModes(TransferMode.ANY);
for(File file:db.getFiles()){
String absolutePath = file.getAbsolutePath();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(absolutePath)));
String line = null;
String text = "";
String nl = System.getProperty("line.separator", "\n");
while((line = br.readLine()) != null)
text += line + nl;
sourceTx.setText( text.trim() );
} catch (Exception e) {
MessageBox.show(MessageBoxType.ERROR, I18n.localize("File Error"), I18n.localize("Error while reading content from selected file"));
} finally{
if(br != null)
try {
br.close();
} catch (Exception e) {}
}
}
}else{
event.setDropCompleted(false);
}
event.consume();
}
});
}