@Override public boolean importData(SComponent component, Transferable transferable) { try { STextComponent textComponent = (STextComponent)component; String data = (String)(transferable.getTransferData(getImportFlavor((STextComponent)component, transferable.getTransferDataFlavors()))); String text = textComponent.getText(); int insertIndex = textComponent.getCaretPosition(); if(insertIndex == -1) { // in case we couldn't determine a drop position, append textComponent.setText(text + data); return true; } if(insertIndex > text.length()) return false; if(textComponent.getSelectionStart() == textComponent.getSelectionEnd()) { String firstPart = text.substring(0, insertIndex); String secondPart = text.substring(insertIndex); if(transferable instanceof TextTransferable) { ((TextTransferable)transferable).setDestComponent((STextComponent)component); } textComponent.setText(firstPart + data + secondPart); } else { String firstPart = text.substring(0, textComponent.getSelectionStart()); String secondPart = text.substring(textComponent.getSelectionEnd()); textComponent.setText(firstPart + data + secondPart); } return true; } catch (UnsupportedFlavorException | IOException e) { } return false; }