JavaFX中Pane类setWidth()方法导致图形异常放大的原因咨询
JavaFX Pane 自定义组件异常问题
编辑说明:若在start方法中使用StackPane而非Pane,代码可正常运行,示例如下:
public void start(Stage primaryStage) { StackPane pane = new StackPane(); }
难道问题出在Pane类上?
我创建了一个继承自JavaFX Pane类的自定义面板类MyPane,并添加了setWidth()方法用于调整其宽度。
我希望将圆形置于舞台中央,并在拖动调整窗口大小时同步缩放图形,但结果不符合预期:
- 初始状态下,图形是左上角的一个小点。按道理MyPane的宽高初始为0,是不是应该完全不显示?
- 无论放大还是缩小窗口,圆形都会持续变大。
初始状态截图:[左上角显示极小的圆形]
窗口调整后截图:[圆形随窗口操作持续放大]
能否有人帮我解析这一过程的底层机制?
提前感谢!
以下是我的代码:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; public class Exercise_14_11 extends Application { public void start(Stage primaryStage) { Pane pane = new Pane(); MyPane circle = new MyPane(); pane.getChildren().add(circle); Scene scene = new Scene(pane, 400, 400); primaryStage.setTitle("Exercise_14_11"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } class MyPane extends Pane { public MyPane() { paint(); } public void paint() { double centerX = getWidth() / 2; double centerY = getHeight() / 2; double radius = centerX; Circle face = new Circle(centerX, centerY, radius); face.setFill(Color.WHITE); face.setStroke(Color.BLACK); getChildren().clear(); getChildren().addAll(face); } @Override public void setWidth(double width) { super.setWidth(width); paint(); } }
我已查阅Pane和Region的官方文档,但仍无头绪。
我知道可以通过属性绑定实现需求,但更关注Pane宽度处理的底层流程。
内容的提问来源于stack exchange,提问作者Liam
相关产品推荐
相关产品推荐

