Esta biblioteca JavaFX se utiliza para crear aplicaciones de Internet ricas en funciones (ofrecen una experiencia y funciones similares a las de las aplicaciones de escritorio). Al igual que otras bibliotecas de Java, los productos creados a partir de esta biblioteca son independientes de la plataforma, pueden ejecutarse en dispositivos como teléfonos móviles, televisores, computadoras, etc.
Otras tecnologías basadas en JVM como Groovy, JRuby, etc. se pueden usar junto con JavaFX; sin embargo, rara vez surge la necesidad, ya que JavaFX ofrece la mayoría de las funciones por sí mismo. Es altamente compatible con Java Swing y su contenido se puede integrar sin problemas en las aplicaciones JavaFX.
Construyendo un reproductor multimedia en JavaFX
Para la aplicación del reproductor multimedia, tendríamos tres clases diferentes, la primera es nuestra clase principal que inicia esta aplicación, luego tenemos la clase Player para ejecutar nuestros videos y audios y la clase MediaBar para controlar nuestros medios.
Implementación:
// Java program to Build a Media // Player in JavaFX import java.io.File; import java.net.MalformedURLException; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.stage.FileChooser; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.layout.BorderPane; import javafx.scene.paint.Color; // launches the application public class Main extends Application { Player player; FileChooser fileChooser; public void start(final Stage primaryStage) { // setting up the stages MenuItem open = new MenuItem("Open"); Menu file = new Menu("File"); MenuBar menu = new MenuBar(); // Connecting the above three file.getItems().add(open); // it would connect open with file menu.getMenus().add(file); // Adding functionality to switch to different videos fileChooser = new FileChooser(); open.setOnAction(new EventHandler<ActionEvent>(){ public void handle(ActionEvent e) { // Pausing the video while switching player.player.pause(); File file = fileChooser.showOpenDialog(primaryStage); // Choosing the file to play if (file != null) { try { player = new Player(file.toURI().toURL().toExternalForm()); Scene scene = new Scene(player, 720, 535, Color.BLACK); primaryStage.setScene(scene); } catch (MalformedURLException e1) { e1.printStackTrace(); } } } // here you can choose any video player = new Player("file:/// F:/songs/srk.mp4"); // Setting the menu at the top player.setTop(menu); // Adding player to the Scene Scene scene = new Scene(player, 720, 535, Color.BLACK); // height and width of the video player // background color set to Black primaryStage.setScene(scene); // Setting the scene to stage primaryStage.show(); // Showing the stage } // Main function to launch the application public static void main(String[] args){ launch(args); } } import javafx.scene.layout.BorderPane; import javafx.scene.layout.Pane; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; public class Player extends BorderPane // Player class extend BorderPane // in order to divide the media // player into regions { Media media; MediaPlayer player; MediaView view; Pane mpane; MediaBar bar; public Player(String file) { // Default constructor media = new Media(file); player = new MediaPlayer(media); view = new MediaView(player); mpane = new Pane(); mpane.getChildren().add(view); // Calling the function getChildren // inorder to add the view setCenter(mpane); bar = new MediaBar(player); // Passing the player to MediaBar setBottom(bar); // Setting the MediaBar at bottom setStyle("-fx-background-color:#bfc2c7"); // Adding color to the mediabar player.play(); // Making the video play } } import javafx.application.Platform; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.Slider; import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaPlayer.Status; public class MediaBar extends HBox { // MediaBar extends Horizontal Box // introducing Sliders Slider time = new Slider(); // Slider for time Slider vol = new Slider(); // Slider for volume Button PlayButton = new Button("||"); // For pausing the player Label volume = new Label("Volume: "); MediaPlayer player; public MediaBar(MediaPlayer play) { // Default constructor taking // the MediaPlayer object player = play; setAlignment(Pos.CENTER); // setting the HBox to center setPadding(new Insets(5, 10, 5, 10)); // Settih the preference for volume bar vol.setPrefWidth(70); vol.setMinWidth(30); vol.setValue(100); HBox.setHgrow(time, Priority.ALWAYS); PlayButton.setPrefWidth(30); // Adding the components to the bottom getChildren().add(PlayButton); // Playbutton getChildren().add(time); // time slider getChildren().add(volume); // volume slider getChildren().add(vol); // Adding Functionality // to play the media player PlayButton.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent e) { Status status = player.getStatus(); // To get the status of Player if (status == status.PLAYING) { // If the status is Video playing if (player.getCurrentTime().greaterThanOrEqualTo(player.getTotalDuration())) { // If the player is at the end of video player.seek(player.getStartTime()); // Restart the video player.play(); } else { // Pausing the player player.pause(); PlayButton.setText(">"); } } // If the video is stopped, halted or paused if (status == Status.HALTED || status == Status.STOPPED || status == Status.PAUSED) { player.play(); // Start the video PlayButton.setText("||"); } } }); // Providing functionality to time slider player.currentTimeProperty().addListener(new InvalidationListener() { public void invalidated(Observable ov) { updatesValues(); } }); // Inorder to jump to the certain part of video time.valueProperty().addListener(new InvalidationListener() { public void invalidated(Observable ov) { if (time.isPressed()) { // It would set the time // as specified by user by pressing player.seek(player.getMedia().getDuration().multiply(time.getValue() / 100)); } } }); // providing functionality to volume slider vol.valueProperty().addListener(new InvalidationListener() { public void invalidated(Observable ov) { if (vol.isPressed()) { player.setVolume(vol.getValue() / 100); // It would set the volume // as specified by user by pressing } } }); } // Outside the constructor protected void updatesValues() { Platform.runLater(new Runnable() { public void run() { // Updating to the new time value // This will move the slider while running your video time.setValue(player.getCurrentTime().toMillis() player.getTotalDuration() .toMillis() * 100); } }); } }
Al ejecutar el programa anterior en un IDE fuera de línea, el reproductor multimedia se vería así:
Explicación
Tenemos tres clases aquí:
1. Clase principal para iniciar nuestro programa
2. Clase Player para reproducir nuestro reproductor multimedia
3. Clase MediaBar para agregar control a nuestro panel de control de la barra multimedia.
En nuestra clase Main.java que se extiende sobre la clase de aplicación, tenemos dos métodos, un método principal para iniciar el programa y un método de inicio donde podemos establecer el escenario y el borde de control de medios. Luego, hemos agregado el control deslizante en la parte inferior para controlar el tiempo del video y controlar el volumen. Para agregar funcionalidad como saltar a una sección particular de video, hemos utilizado el-
player.seek(player.getMedia(). getDuration().multiply(time.getValue()/100));
Y por cambiar de medio
fileChooser.showOpenDialog(primaryStage)
se ha utilizado en el programa anterior. Para fines de diseño, hemos creado el CSS que se muestra en
-fx-background-color:#bfc2c7
Una de las mejores características de JavaFX es que se puede controlar el formato con hojas de estilo en cascada (CSS). Hemos utilizado la función .getStatus() para verificar el estado del reproductor, ya sea que esté detenido, reproduciendo, detenido o en pausa, y tomar las medidas correspondientes.
Nota: Durante la importación, seleccione siempre los archivos JavaFX.
Referencias: Video referido
Publicación traducida automáticamente
Artículo escrito por Devoshree Mukherji y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA