2017-02-03 30 views
0

Предположим, у меня есть следующие:Обновление TextField, когда размер изменения формы - JavaFX

Создание прямоугольника (с верхней левой Handler):

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; 
    }); 

контроллер класса (метод выбора Object):

@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); 
    } 

Я знаю, что писать System.out.println (rect.getHeight()) в R Класс ectangle даст мне высоту каждый раз, когда размер будет изменен.

Однако мой вопрос заключается в том, как бы добавить это значение в textField, хранящийся в моем классе контроллера? Я пробовал разные способы, но я все равно получаю исключение с нулевым указателем.

Благодаря

ответ

0

Где-то Вы, вероятно, сделать

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()))); 
+0

Это Wo rked! Спасибо! : D (я поставлю галочку через пять минут) – TheBeliever12

+0

Эй, просто быстрый вопрос, предположим, у меня также был поворот, чтобы получить угол формы. Как бы я мог написать это аналогично - rotateField.textProperty(). Bind (Bindings.createStringBinding ( () -> String.format ("%. 1f", group.getBoundsInLocal(). GetHeight()), . boundsInLocalProperty())); – TheBeliever12

+0

@ TheBeliever12 Используйте 'rotateProperty' (или какое-либо свойство меняется при его повороте)? –