Как указано в комментариях, приведенный ниже код демонстрирует использование BooleanProperty
в вашем приложении, которое содержит текущее состояние "воспроизводит мультимедиа":
BooleanProperty isPlaying = new SimpleBooleanProperty();
Добавляя прослушиватель к этому свойству, выможет гарантировать, что правильный значок всегда отображается на кнопке воспроизведения:
isPlaying.addListener((observable, oldValue, newValue) -> {
if (newValue) {
playButton.setGraphic(pauseIcon);
} else {
playButton.setGraphic(playIcon);
}
});
Тогда просто сделайте так, чтобы ваш Button
также переключал состояние этого BooleanProperty
:
playButton.setOnAction(event -> {
// Toggle the isPlaying property
isPlaying.set(!isPlaying.get());
});
Вот полный пример приложения, которое вы можете запустить, чтобы проверить его самостоятельно:
import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContentDisplay;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class PlayButtonToggleSample extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Simple Interface
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(10));
// Create our two ImageViews to hold the icons we need
ImageView playIcon = new ImageView("play.png");
ImageView pauseIcon = new ImageView("pause.png");
// BooleanProperty to track whether or not the application is currently playing media
BooleanProperty isPlaying = new SimpleBooleanProperty();
// Create a simple button with an image
Button playButton = new Button();
playButton.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
playButton.setGraphic(playIcon);
// Add action for the button
playButton.setOnAction(event -> {
// Toggle the isPlaying property
isPlaying.set(!isPlaying.get());
});
// Now, add a listener to the isPlaying property that will toggle the icon used on the playButton
isPlaying.addListener((observable, oldValue, newValue) -> {
if (newValue) {
playButton.setGraphic(pauseIcon);
} else {
playButton.setGraphic(playIcon);
}
});
root.getChildren().add(playButton);
// Show the stage
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Sample");
primaryStage.show();
}
}