You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX Stage无法刷新?圆形动画位置不更新问题求助

问题分析与解决方案

你的代码存在两个核心问题,导致圆形位置无法正常更新显示:

  1. 布局管理器覆盖手动位置设置
    你将Circle放入了StackPane中,而StackPane的默认行为是自动将子节点居中对齐,它会强制修改Circle的centerX和centerY属性来维持居中状态,直接覆盖了你在setPosition()里的手动设置,所以圆形始终被拉回中心位置,看不到位置变化。

  2. 多余的舞台显示调用
    在Timeline的回调中重复调用primaryStage.show()完全没必要,舞台只需要在初始化阶段显示一次即可,重复调用不仅不会触发UI刷新,还可能干扰正常的更新流程。


修正后的代码

只需调整容器类型、优化位置计算逻辑并移除冗余调用即可解决问题:

package circler;

import javafx.animation.*;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;

public class Main extends Application {
    Circle circle;
    int distance = 100;
    int angle = 0;
    final int centerX = 400;
    final int centerY = 400;

    public void start(Stage primaryStage) {
        circle = new Circle();
        circle.setCenterX(centerX);
        circle.setCenterY(centerY);
        circle.setRadius(10);
        circle.setFill(Color.RED);

        Timeline timeline = new Timeline(new KeyFrame(Duration.millis(100), e -> {
            angle++;
            angle %= 360;
            setPosition();
        }));

        timeline.setCycleCount(Animation.INDEFINITE);
        timeline.play();

        primaryStage.setScene(new Scene(circle, 800, 800));
        primaryStage.show();
    }

    private int calc(boolean sin) {
        return (int) (sin ? distance * Math.sin(Math.toRadians(angle)) : distance * Math.cos(Math.toRadians(angle)));
    }
    
    private void setPosition() {
        circle.setCenterX(centerX + calc(true));
        circle.setCenterY(centerY + calc(false));
    }
}

关键修改说明

  • 替换StackPane为直接使用Circle作为Scene根节点(也可以改用Pane这类不自动布局的容器),避免布局管理器强制修改位置。
  • 定义固定的中心点centerX和centerY,避免依赖初始化阶段可能未正确绑定的circle.getScene()属性。
  • 将Timeline的时间单位改为Duration.millis(100),精准匹配你需要的100ms更新间隔。
  • 移除Timeline回调中的primaryStage.show()冗余调用。

修改完成后,圆形会按预期绕中心点每100ms更新一次位置,舞台将实时显示其移动状态。

内容的提问来源于stack exchange,提问作者Tom O.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:35:26