2017-03-03 3 views
0

Vous trouverez ci-dessous l'exemple de code, avec d'autres caractéristiques laissées de côté. Le code ci-dessous englobe uniquement le lecteur multimédia. Il est utilisé sur un écran de menu pour un projet sur lequel je travaille. Mon problème est d'obtenir le bouton musicButton (qui est un bouton à bascule - On/Off) pour fonctionner correctement. En utilisant le code suivant, lorsque j'interagis avec le bouton bascule de musique, la musique de lecture s'arrête. Lorsque je le clique à nouveau pour reprendre la lecture, il ne reprend pas. Il s'arrête une fois et s'arrête complètement.JavaFX - Bouton d'activation/désactivation de la musique (ne fonctionne pas)

Vous pouvez voir que j'ai essayé simplement en utilisant les valeurs booléennes du bouton bascule dans deux déclarations if ... Si elle est éteinte et pressée, mettre en pause la musique. Si c'est activé et pressé, reprenez la musique. Le problème est, comme indiqué plus haut, de mettre en pause la musique mais elle ne peut pas être reprise. J'ai essayé quelques combinaisons avec des boucles, mais rien n'a fonctionné non plus.

Je pense que si les instructions sont trop simples pour cela. J'ai parcouru JavaDocs et divers articles en ligne mais je ne trouve rien de définitif. J'ai lu un peu sur les auditeurs, mais ils semblent trop complexes pour un interrupteur marche/arrêt.

Ma question: Comment mettre le musicButton en pause/lire la musique, quand l'utilisateur clique dessus?

Toute aide est appréciée, merci.

-Bagger

/* A simple game, the mechanics not yet implemented. 

This is simply working on the title screen. */ 


import java.io.File; 
import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.ToggleButton; 
import javafx.scene.layout.VBox; 
import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
import javafx.stage.Stage; 

public class MenuFX extends Application { 

@Override 

public void start (Stage primaryStage) { 

    // Make the window a set size... 
    primaryStage.setResizable(false); 

    // Create media player 
    // Rather than inputting the entire absolute URI, which would confine the program 
    // to the creator's device, we create a new file, grab the URI on whatever machine 
    // the program is running on and convert it to a string... portability. 
    Media menuMusic = new Media(new File("music/menu.mp3").toURI().toString()); 
    MediaPlayer menuPlayer = new MediaPlayer(menuMusic); 

    // Want to see the absolute URI? Uncomment the next line 
    //System.out.println(new File("music/menu.mp3").toURI().toString()); 

    // Adjust the cycles and volume then start playing menu music 
    // Lazy, but it will suffice 
    menuPlayer.setCycleCount(999999999); 
    menuPlayer.setVolume(0.1); 
    menuPlayer.setAutoPlay(true); 




    /* 
    Need assistance here 
    */ 


    // Create music toggle button 
    ToggleButton musicButton = new ToggleButton("Music On/Off"); 

    if (musicButton.isSelected() == false) { 

     musicButton.setOnAction(e -> menuPlayer.pause()); 
    } 

    if (musicButton.isSelected() == true) { 

     musicButton.setOnAction(e -> menuPlayer.play()); 
    } 




    // Add all nodes to the vbox pane and center it all 
    // Must be in order from top to bottom 
    menuVBox.getChildren().add(musicButton); 
    menuVBox.setAlignment(Pos.CENTER); 

    // New scene, place pane in it 
    Scene scene = new Scene(menuVBox, 630, 730); 

    // Place scene in stage 
    primaryStage.setTitle("-tiles-"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

// Needed to run JavaFX w/o the use of the command line 
public static void main(String[] args) { 

    launch(args); 
} 

} 

Répondre

0

Je pense que vous êtes au-dessus de penser. Vous devriez avoir un EventListener sur votre ToggleButton pour faire une pause et jouer de la musique.

musicButton.setOnAction(event -> { 
    if (musicButton.isSelected()) { 
     menuPlayer.pause(); 
    }else { 
     menuPlayer.play(); 
    } 
}); 

Cela devrait vous donner l'effet désiré.

La raison pour laquelle votre code ne fonctionnait pas est que le ToggleButton n'est pas sélectionné par défaut, donc le seul EventListener auquel il est associé est le menuPlayer.pause();. Donc, quand vous cliquez dessus, il ne fait que marquer une pause. J'ai déplacé votre code dans un EventListener, et ai utilisé le if-else approprié.

+0

Solution très simple ... Merci beaucoup. Tout simplement besoin d'être dans le même bloc de gestionnaire ... Je vois maintenant. Merci encore! – Psychobagger

+0

À tout moment. Si cela a résolu votre problème, veuillez le sélectionner comme réponse. –