2017-06-23 2 views
0

Je veux créer une animation dans JavaFXDeux nœuds Fade In et Fade Out chaque minute

premier volet affiche et dans quelques secondes premier volet se fadeOut et le deuxième volet affichera. Comment puis je faire ça?

Je l'ai essayé dans le sujet.

ceci est mon code

@Override 
public void run() { 
    changingPane(); 
} 
Thread t; 
public void changingPane() { 
    t = new Thread() { 
     @Override 
     public void run() { 
      for (;;) { 
       if(mainController.getOpenPane()==0) 
       { 
       mainController.nextPane(); 
       } 
       else{ 
       mainController.prevPane(); 
       } 
      } 
     } 

    }; 
    t.start(); 
} 
+0

Ne pas utiliser des fils pour cela. Utilisez l '[API d'animation] (http://docs.oracle.com/javase/8/javafx/api/javafx/animation/package-summary.html). –

+0

comment puis-je faire cela? Avez-vous un échantillon pour ça? – Shaine

+1

Le [tutorial] (http://docs.oracle.com/javase/8/javafx/visual-effects-tutorial/animations.htm#JFXTE149) contient de nombreux exemples. Essayez quelque chose et postez une question * spécifique * si vous ne pouvez pas le faire fonctionner. –

Répondre

1

Disons que vous avez deux volets,

private Pane FIRST_PANE = new Pane(); 
private Pane SECOND_PANE = new Pane(); 

Et ajouter ces méthodes pour fade-in et fade-out les vitres,

Fade -Dans la méthode

private void fadeInPane(Pane pane) { 
    FadeTransition fadeIn = new FadeTransition(Duration.millis(2900), pane); 
    fadeIn.setFromValue(0); 
    fadeIn.setToValue(1); 
    fadeIn.setOnFinished(e -> fadeOutPane(pane)); 
    fadeIn.play(); 
} 

Fade-out Méthode

private void fadeOutPane(Pane pane) { 
    FadeTransition fadeOut = new FadeTransition(Duration.millis(1900), pane); 
    fadeOut.setFromValue(1); 
    fadeOut.setToValue(0); 
    fadeOut.play(); 
} 

Ensuite, appelez ces méthodes selon votre logique et le besoin,

private void animatePane() { 
    boolean first_active = true; 

    Timeline clock = new Timeline(new KeyFrame(Duration.ZERO, e -> {    

     if(first_active){ 
      fadeInPane(FIRST_PANE); 
      first_active = false; 
     }else{ 
      first_active = true; 
      fadeInPane(SECOND_PANE); 
     } 
    }), 
     new KeyFrame(Duration.seconds(30)) 
    ); 
    clock.setCycleCount(Animation.INDEFINITE); 
    clock.play(); 
} 
+0

La méthode Fadein affiche une erreur. Transitionbuilder ne peut pas être converti en fadetransisation – Shaine

+0

Désolé pour cela je n'ai pas testé ou exécuté ce code mais j'ai mis à jour le code. Voyons voir ce qui se passe .. –

+0

pas d'erreur mais. ce n'est pas bien juste un petit changement. essayer de courir. Merci. – Shaine