Hej,
Tworze program do drzewa genealogicznego ( i chyba sie zestarzeje zanim go skoncze)...
Pojawł mi isę dziwny problem nie bardzo wiem skad. Efekt jak na załączonym obrazku:
title

Linia pionowa kjest narysowana prawidlowo ( hcociaz mam dziwne wrazenie ze nie jest dokladnie prostopadla.. natomiast obrazek obok jak widac jest przesuniety, przy czym do jego ustawienia uzywam tego samego punktu co do narysowania tej linii, dlatego nie rozumiem skad bierze się ta rozbierznosć.

Tutaj jest funkcja do wyliczanie poziomej linii, ktora jednoczesnie ustawia punkt srodkowy:

    private void drawLine() {

        subBorderPane.getChildren().remove(getLine());

        Optional<ChildConnector> opStart = list.stream().min(Comparator.comparingDouble(value -> value.getLine().getStartX()));
        Optional<ChildConnector> opEnd = list.stream().max(Comparator.comparingDouble(value -> value.getLine().getStartX()));

        if (opStart.isPresent() && opEnd.isPresent()) {
            Line start = opStart.get().getLine();
            Line end = opEnd.get().getLine();
            getLine().setStartX(start.getEndX());
            getLine().setStartY(start.getEndY());
            getLine().setEndX(end.getEndX());
            getLine().setEndY(end.getEndY());

            //To jest punkt wyznaczający srodek poziomej linii
            middle.set(new Point2D((getLine().getStartX() + getLine().getEndX()) / 2, getLine().getStartY()));

            subBorderPane.getChildren().add(getLine());
        }
    }

Na ten punkt srodkowy ustawiony jest listener ktory ma przesunac obrazek, ( dla pewnosci dalam listener rowniez na zmiane szerokosci obrazka:

      childrenConnector.middleProperty().addListener((observable, oldValue, newValue) -> {
            relationTypeElement.setLayoutX(newValue.getX() - relationTypeElement.getWidth()/2);
            spouseCard.setLayoutX(relationTypeElement.getLayoutX() + 200);
            childrenConnector.connectNodeWithMiddle(relationTypeElement);
        });

Linia pionowa jest rysowana rowniez w oparciu o punkt srodkowy

    public void connectNodeWithMiddle(Node n) {
        if (list.size() != 0) {
            subBorderPane.getChildren().remove(withNodeConnector.get());
            Bounds b = getRelativeBounds(n);
            Point2D bottomPoint = getBottomPoint(b);

            withNodeConnector.get().setStartX(getMiddle().getX());
            withNodeConnector.get().setStartY(getMiddle().getY());
            withNodeConnector.get().setEndX(bottomPoint.getX());
            withNodeConnector.get().setEndY(bottomPoint.getY());

            subBorderPane.getChildren().add(withNodeConnector.get());
            initLineProperties(withNodeConnector.get());
        }
    }
    protected Bounds getRelativeBounds(Node node) {
        Bounds nodeBoundsInScene = node.localToScene(node.getBoundsInLocal());
        return subBorderPane.sceneToLocal(nodeBoundsInScene);
    }

Ale mimo. to. nastepuje przesuniecie. Ma ktos jakis pomysł ?