当前位置: 首页 > 知识库问答 >
问题:

如何为JavaFX Stage创建调整大小动画?

袁文景
2023-03-14

我一直在尝试对JavaFX阶段进行缩放转换,以替换应用程序主窗口的当前场景(在本例中为登录帧)。
当发生这种情况时,由于新场景更大,窗口的大小会以一种不优雅的方式突然被重新调整。

InputStream is = null;
try {
    is = getClass().getResourceAsStream("/fxml/principal.fxml");
    Region pagina = (Region) cargadorFXML.load(is);
    cargadorFXML.<ContenedorPrincipal>getController().setEscenario(escenario);

    final Scene escena = new Scene(pagina, 900, 650);

    escena.setFill(Color.TRANSPARENT);
    escenario.setScene(escena);
    escenario.sizeToScene();
    escenario.centerOnScreen();
    escenario.show();
} catch (IOException ex) {
    // log "Unable to load the main application driver"
    log.error("No fue posible cargar el controlador principal de la aplicación."); 
    log.catching(ex);
} finally {
    if (is != null) {
        try {
            is.close();
        } catch (IOException e) {}
    }
}

共有1个答案

夏祯
2023-03-14

我真的很喜欢你的主意,所以我设法做了点小事情。我希望这能对你有所帮助。

我使用了一个定时器来每隔25ms改变舞台宽度和高度,以便给人一个动画的印象。

import java.util.Timer;
import java.util.TimerTask;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class SmoothResize extends Application {

    @Override
    public void start(final Stage stage) throws Exception {
        stage.setTitle("Area Chart Sample");
        Group root = new Group();
        Scene scene  = new Scene(root, 250, 250);
        stage.setResizable(false);

        Timer animTimer = new Timer();
        animTimer.scheduleAtFixedRate(new TimerTask() {
            int i=0;

            @Override
            public void run() {
                if (i<100) {
                    stage.setWidth(stage.getWidth()+3);
                    stage.setHeight(stage.getHeight()+3);
                } else {
                    this.cancel();
                }
                i++;
            }

        }, 2000, 25);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 类似资料:
  • 问题内容: 有关于这个另一个线程,我已经试过。但是有一个问题:删除内容不会缩小。我找不到任何将其缩小为正确大小的方法-该值会以的完整大小返回,而不是其内容的大小。 该页面上的代码如下: 问题答案: 这对我有效(Firefox 3.6 / 4.0和Chrome 10/11): _如果您想在jsfiddle _上尝试它,它以一行开始,并且仅增长所需的确切数量。可以使用一个,但是我想写一些这样的东西(在

  • 问题内容: 如何调整JTextField的大小? 问题答案: 如果看一下Javadoc,您会看到JTextField是从Component派生的,并且具有setSize()方法。如果您没有布局管理器,那就很有用。 如果你 这样做 有一个布局管理器,则有必要对setPreferredSize() / / 是要走的路。

  • 问题内容: 我一直试图(徒劳地)建立一个页面,当我更改窗口大小时,其元素将重新调整大小。我可以在CSS中使用它来处理图像,但是没有问题,但是我似乎无法在文本上完成相同的操作,而且我不确定在CSS中是否有可能。而且我似乎找不到能完成此任务的jQuery脚本。 当用户调整窗口大小时,我实质上希望页面能够动态流畅地缩放,而无需用户调用页面缩放。通过css在我的img div上这可以正常工作,但对于文本则

  • 我真的开始使用LWJGL(我刚刚开始),我专注于一件事:当我创建一个窗口并且我想将其设置为不可调整大小时,我使用: 然而,即使我想在创建窗口后设置它,我也不知道如何设置。我只是尝试在创建窗口后放置命令,但它不起作用: 那么,我该如何解决这个问题呢?

  • 问题内容: 有关于这个另一个线程,我已经试过。但是有一个问题:删除内容不会缩小。我找不到任何将其缩小为正确大小的方法-该值会以的完整大小返回,而不是其内容的大小。 该页面上的代码如下: 问题答案: 这对我有效(Firefox 3.6 / 4.0和Chrome 10/11): 如果您想在jsfiddle上尝试它,它以一行开始,并且仅增长所需的确切数量。可以使用一个,但是我想写一些这样的东西(在一个大