我一直在尝试为
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) {}
- }
- }
解决方法
我真的很喜欢你的想法,所以我设法做了一些事情.
我希望这将有助于你.
我希望这将有助于你.
我用一个Timer来改变舞台的宽度和高度每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);
- }
- }