
Проблема заключается в поведении JavaFX. У меня есть рабочий фрагмент кода, который удаляет порт с подключенной линией и правильно обновляет позиции остальных линий. Код следующий:
Код: Выделить всё
inputPortsList.registerAfterRemoveConsumer(
(port, index) -> {
FXPortLayout p = ((FxAbstractPort) port).getLayout();
inputPorts.remove(p);
vBoxInputPorts.getChildren().remove(p);
try {
Thread.sleep(50);
} catch (InterruptedException ex) {
}
Platform.runLater(() -> {
updateLines();
});
}
);

На мой взгляд, код должен быть правильно написан так. Однако этот код не обновляет строки, которые не удалены.
Код: Выделить всё
inputPortsList.registerAfterRemoveConsumer(
(port, index) -> {
FXPortLayout p = ((FxAbstractPort) port).getLayout();
inputPorts.remove(p);
vBoxInputPorts.getChildren().remove(p);
updateLines();
}
);

Событие, удаляющее строку, корректно выполняется перед вызовом vBoxInputPorts.getChildren().remove(p) и выглядит следующим образом:
Код: Выделить всё
if (lineToDel != null) {
Line l = lineToDel.getLine();
pane.getChildren().remove(l);
}
Одно замечание: строки привязаны к портируется через события мыши, и каждое движение узла исправляет неправильные положения. Однако сразу после удаления строки диаграмма портится.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -behaviour
Мобильная версия