gpt4 book ai didi

JavaFX - widthProperty() 和 heightProperty() 何时设置/更新

转载 作者:行者123 更新时间:2023-12-02 09:44:36 25 4
gpt4 key购买 nike

我正在尝试实现一个拖放应用程序,用户可以将新的“组件”拖放到 Canvas 上,然后拖动它们。这是我用来实现此目的的代码:

在 CanvasController 类中

canvas.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {

// Create new component
ComponentController component = new ComponentController();

// Add the component to the canvas
canvas.getChildren().add(component);

// Relocate the component to the mouse location
component.relocateToPointInScene(new Point2D(event.getSceneX(),event.getSceneY()));

// Make the component visible
component.setVisible(true);

// Set drop complete
event.setDropCompleted(true);

// Consume event
event.consume();

}
}

在 ComponentController 类中

protected final void relocateToPointInScene(Point2D scenePoint) {

// Create a point in the parent (canvas) copordinates
Point2D parentPoint = getParent().sceneToLocal(scenePoint);

// Locate the node so that its centre is located at the parent point
this.relocate((int) (parentPoint.getX() - (widthProperty().getValue()/2.0)), (int) (parentPoint.getY() - heightProperty().getValue()/2.0));

}

从功能上讲,它工作正常,但新组件没有放置在 Canvas 上的正确位置 - 它的位置应该使组件的中心位于鼠标位置,但它被放下,以便顶部左上角位于鼠标位置。

我发现这是因为当调用 relocateToPointInScene(Point2D scenePoint) 时,新组件的 widthProperty() 和 heightProperty() 值仍然为零。如果我重新拾起组件,再次将其拖放,代码将按预期工作,因为现在 widthProperty() 和 heightProperty() 不为零。

canvas.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {

// Relocate the component to the mouse location
component.relocateToPointInScene(new Point2D(event.getSceneX(),event.getSceneY()));

}
}

所以我的问题是:

  1. 为什么在 drop 函数中调用时 widthProperty() 和 heightProperty() 仍然为零? - 此时,对象已被构造、初始化并添加到父级( Canvas ),因此我不明白为什么不应设置这些值。

  2. 第一次和第二次调用 relocateToPointInScene(Point2D scenePoint) 来更改这些值之间发生了什么。

最佳答案

正如 Slaw 所建议的,在将组件添加为子组件之后,但在重新定位它之前,调用 canvas.applyCss() ,然后调用 canvas.layout() 即可达到目的.

关于JavaFX - widthProperty() 和 heightProperty() 何时设置/更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56762442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com