2017-03-03 4 views
0

Unten ist das Codebeispiel mit anderen weggelassenen Funktionen. Der folgende Code umfasst nur den Media Player. Es wird auf einem Menübildschirm für ein Projekt verwendet, an dem ich gerade arbeite. Mein Problem ist, dass der MusicButton (der eine Umschalttaste ist - On/Off) ordnungsgemäß funktioniert. Mit dem folgenden Code wird die Musikwiedergabe unterbrochen, wenn ich mit der Umschalttaste für die Musik interagiere. Wenn ich es erneut anklicke, um die Wiedergabe fortzusetzen, wird es nicht fortgesetzt. Es bleibt einmal stehen und hört auf.JavaFX - Musik Ein/Aus-Umschalttaste (funktioniert nicht)

Sie können sehen, ich habe versucht, einfach die booleschen Werte der Umschaltfläche in zwei if-Anweisungen zu verwenden ... Wenn es aus ist und gedrückt, pausieren Sie die Musik. Wenn es eingeschaltet ist und gedrückt wird, fahren Sie mit der Musik fort. Das Problem ist, wie bereits erwähnt wurde, dass die Musik pausiert, aber nicht fortgesetzt werden kann. Ich habe einige Kombinationen mit Loops ausprobiert, aber auch nichts hat funktioniert.

Ich denke, wenn Aussagen zu einfach dafür sind. Ich habe die JavaDocs und verschiedene Online-Artikel durchforstet, aber ich kann nichts definitives finden. Ich habe ein wenig über Zuhörer gelesen, aber sie erscheinen übermäßig komplex für einen Ein-/Ausschalter.

Meine Frage: Wie bekomme ich den MusicButton zum Anhalten/Abspielen der Musik, wenn der Benutzer darauf klickt?

Jede Hilfe wird geschätzt, danke.

-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); 
} 

} 

Antwort

0

Ich glaube, Sie sind es über denken. Sie sollten eine EventListener auf Ihrem ToggleButton haben, um die Musik anzuhalten und abzuspielen.

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

Dies sollte Ihnen den gewünschten Effekt geben.

Der Grund, warum Ihr Code nicht funktionierte, ist, weil die ToggleButton nicht standardmäßig ausgewählt ist, so dass die einzige EventListener, die damit verbunden ist, ist die menuPlayer.pause();. Wenn Sie also darauf klicken, hält es immer nur an. Ich habe Ihren Code in eine EventListener verschoben und die entsprechende if-else verwendet.

+0

Sehr einfache Lösung ... Vielen Dank. Alles musste nur im selben Handlerblock sein ... ich sehe es jetzt. Danke nochmal! – Psychobagger

+0

jederzeit. Wenn dies Ihr Problem gelöst hat, wählen Sie es bitte als Antwort aus. –

Verwandte Themen