我一直在尝试为
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); } }