形状大小更改时更新 textField - JavaFX

Updating a textField when size of shape changes - JavaFX

假设我有以下内容:

创建一个矩形(使用左上处理程序):

public Group createDraggableRectangle(double x, double y, double width, double height) {
    final double handleRadius = 20 ;
    final double handleRadius2 = 30 ;

    Rectangle rect = new Rectangle(x, y, width, height);

    // top left resize handle:
    Circle resizeHandleNW = new Circle(handleRadius, Color.RED);
    resizeHandleNW.setOpacity(0);
    // bind to top left cornerof Rectangle:
    resizeHandleNW.centerXProperty().bind(rect.xProperty());
    resizeHandleNW.centerYProperty().bind(rect.yProperty());
    resizeHandleNW.setStyle("-fx-cursor: NW_RESIZE; ");

    Group group = new Group(rect, resizeHandleNW);


    Wrapper<Point2D> mouseLocation = new Wrapper<>();

    setUpDragging(resizeHandleNW, mouseLocation) ;

    resizeHandleNW.setOnMouseDragged(event -> {
        if (mouseLocation.value != null) {
            double deltaX = event.getSceneX() - mouseLocation.value.getX();
            double deltaY = event.getSceneY() - mouseLocation.value.getY();
            double newX = rect.getX() + deltaX ;
            if (newX >= handleRadius
                    && newX <= rect.getX() + rect.getWidth() - handleRadius) {
                rect.setX(newX);
                rect.setWidth(rect.getWidth() - deltaX);
            }
            double newY = rect.getY() + deltaY ;
            if (newY >= handleRadius
                    && newY <= rect.getY() + rect.getHeight() - handleRadius) {
                rect.setY(newY);
                rect.setHeight(rect.getHeight() - deltaY);
            }
            mouseLocation.value = new Point2D(event.getSceneX(), event.getSceneY());

        }
           return group;
    });

控制器Class(选择对象的方法):

@FXML
private TextField heightField;

 if (!selectedShapes.contains(shape)) {
        shape.setStyle("-fx-effect: dropshadow(three-pass-box, #cece02, 6, 6, 0, 0);");
        selectedShapes.add(shape);
        rotate.setDisable(false);
        deletebutton.setDisable(false);
    }

我知道在 Rectangle class 中写 System.out.println(rect.getHeight()) 会在每次改变尺寸时给我高度。

但是我的问题是如何将此值添加到我的控制器 class 中保存的文本字段?我尝试了各种方法,但我总是收到空指针异常。

谢谢

你可能会去的地方

Group draggableRect = createDraggableRectangle(...);

那么你就做

heightField.textProperty().bind(Bindings.createStringBinding(
    () -> String.format("%.1f", draggableRect.getBoundsInLocal().getHeight()),
    draggableRect.boundsInLocalProperty());

或者,如果您希望高度字段的文本以其他方式更改(例如,如果它是可编辑的),

draggableRect.boundsInLocalProperty().addListener((obs, oldBounds, newBounds) ->
    heightField.setText(String.format("%.1f", newBounds.getHeight())));