形状大小更改时更新 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())));
假设我有以下内容:
创建一个矩形(使用左上处理程序):
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())));