Это определенно ошибка. Взгляните на метод ListTransferHandler # cleanup . Его цель - удалить ранее выбранный элемент из списка. Коррекция индексов выполняется перед удалением:
if (addCount > 0) {
for (int i = 0; i < indices.length; i++) {
if (indices[i] > addIndex) {
indices[i] += addCount;
}
}
}
Так или иначе, метод ListTransferHandler # importString , который инициализирует addCount , никогда не вызывается, следовательно, исправление никогда не выполняется.
В качестве обходного пути вы можете инициализировать его самостоятельно:
int addCount = indices.length;
Это исправит INSERT Режим отбрасывания.
UPD:
Только что заметил, что другие режимы сброса тоже не работают Итак, окончательное исправление (похоже, так):
public class ListTransferHandler extends TransferHandler {
private boolean insert;
//........
public boolean importData(TransferHandler.TransferSupport info) {
//......
insert = dl.isInsert();
//......
protected void exportDone(JComponent c, Transferable data, int action) {
cleanup(c, insert && action == TransferHandler.MOVE);
}
protected void cleanup(JComponent c, boolean remove) {
if (remove && indices != null) {
int addCount = indices.length;
//.....
}
Также следует удалить все неиспользуемые поля и методы.