public class Player extends Application { private MediaPlayer mediaPlayer; @Override public void start(Stage primaryStage) throws Exception { // 创建UI界面 BorderPane root = new BorderPane(); // 创建媒体播放器 Media media = new Media(new File("video.mp4").toURI().toString()); mediaPlayer = new MediaPlayer(media); // 创建媒体展示组件 MediaView mediaView = new MediaView(mediaPlayer); root.setCenter(mediaView); // 创建控制面板 HBox controlBar = new HBox(10); controlBar.setPadding(new Insets(10)); // 创建播放/暂停按钮 Button playButton = new Button("播放"); playButton.setOnAction(event -> { if (mediaPlayer.getStatus() == MediaPlayer.Status.PLAYING) { mediaPlayer.pause(); playButton.setText("播放"); } else { mediaPlayer.play(); playButton.setText("暂停"); } }); // 创建音量调节器 Slider volumeSlider = new Slider(); volumeSlider.setMin(0); volumeSlider.setMax(1); volumeSlider.setValue(mediaPlayer.getVolume()); volumeSlider.setPrefWidth(100); volumeSlider.valueProperty().addListener(new InvalidationListener() { @Override public void invalidated(Observable observable) { mediaPlayer.setVolume(volumeSlider.getValue()); } }); // 创建音量标签 Label volumeLabel = new Label("音量:"); // 添加控件到控制面板 controlBar.getChildren().addAll(playButton, volumeLabel, volumeSlider); // 创建打开文件按钮 Button openFileButton = new Button("打开文件"); openFileButton.setOnAction(event -> { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("选择视频文件"); File file = fileChooser.showOpenDialog(primaryStage); if (file != null) { Media newMedia = new Media(file.toURI().toString()); mediaPlayer.stop(); mediaPlayer = new MediaPlayer(newMedia); mediaView.setMediaPlayer(mediaPlayer); playButton.setText("播放"); volumeSlider.setValue(mediaPlayer.getVolume()); } }); controlBar.getChildren().add(openFileButton); // 将控制面板添加到主界面 root.setBottom(controlBar); // 创建场景并显示 Scene scene = new Scene(root, 900, 560); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
时间: 2024-02-14 20:20:48 浏览: 128
这是一个 JavaFX 应用程序,它创建了一个 UI 界面,其中包含了一个媒体播放器和一些控制按钮,可以用来播放视频文件。在这个程序中,通过创建 Media 和 MediaPlayer 对象来加载和播放视频文件,使用 MediaView 控件来展示视频画面,使用 Button 控件来实现播放/暂停、打开文件等功能,使用 Slider 控件来调节音量大小。这个程序也演示了如何通过监听 Slider 的 valueProperty 来动态调节音量,以及如何通过 FileChooser 来选择视频文件。
相关问题
利用MediaPlayer播放了一个简单的音乐播放器,
好的,以下是一个简单的音乐播放器的代码示例:
```java
import java.io.File;
import javafx.application.Application;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class MusicPlayer extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// 创建一个媒体对象
String musicPath = "path/to/your/music.mp3";
Media media = new Media(new File(musicPath).toURI().toString());
// 创建一个媒体播放器对象
MediaPlayer mediaPlayer = new MediaPlayer(media);
// 开始播放音乐
mediaPlayer.play();
// 关闭窗口时停止播放
primaryStage.setOnCloseRequest(event -> mediaPlayer.stop());
}
public static void main(String[] args) {
launch(args);
}
}
```
在这个示例中,我们创建了一个名为 `MusicPlayer` 的类,继承自 `Application` 类。在 `start` 方法中,我们首先创建了一个媒体对象 `Media`,它的构造函数需要一个音乐文件的路径。然后,我们创建了一个媒体播放器对象 `MediaPlayer`,它的构造函数需要一个 `Media` 对象。接着,我们调用 `play` 方法开始播放音乐。
最后,我们注册了一个窗口关闭事件,当用户关闭窗口时,停止播放音乐。
注意:在使用 `MediaPlayer` 播放音乐时,需要引入 JavaFX 库。如果你使用的是 JDK 9 或更高版本,JavaFX 库是内置的,如果你使用的是 JDK 8 或更低版本,需要手动下载并添加 JavaFX 库。
javafx 用mediaPlayer.setOnEndOfMedia()循环播放不同视频
可以通过设置MediaPlayer的OnEndOfMedia事件来实现循环播放不同视频。具体步骤如下:
1. 创建一个MediaPlayer对象,并将其与第一个视频文件关联。
```
MediaPlayer mediaPlayer = new MediaPlayer(new Media("file:/path/to/first/video.mp4"));
```
2. 设置MediaPlayer的OnEndOfMedia事件,当播放完成时,根据需要切换到下一个视频文件。
```
mediaPlayer.setOnEndOfMedia(() -> {
// 切换到下一个视频文件
String nextVideoFile = getNextVideoFile(); // 获取下一个视频文件的路径
mediaPlayer.stop();
mediaPlayer = new MediaPlayer(new Media("file:" + nextVideoFile));
mediaPlayer.setOnEndOfMedia(() -> mediaPlayer.seek(Duration.ZERO)); // 循环播放当前视频
mediaPlayer.play();
});
```
在这里,我们通过调用getNextVideoFile()方法获取下一个视频文件的路径,并创建一个新的MediaPlayer对象来播放它。我们还将OnEndOfMedia事件设置为使MediaPlayer在播放完成后重新开始当前视频。
3. 开始播放第一个视频文件。
```
mediaPlayer.play();
```
完整代码示例如下:
```
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Main extends Application {
private String[] videoFiles = {
"/path/to/first/video.mp4",
"/path/to/second/video.mp4",
"/path/to/third/video.mp4"
};
private int currentVideoIndex = 0;
@Override
public void start(Stage primaryStage) throws Exception {
// 创建一个MediaPlayer对象,并将其与第一个视频文件关联
MediaPlayer mediaPlayer = new MediaPlayer(new Media("file:" + videoFiles[currentVideoIndex]));
// 设置OnEndOfMedia事件
mediaPlayer.setOnEndOfMedia(() -> {
// 切换到下一个视频文件
currentVideoIndex = (currentVideoIndex + 1) % videoFiles.length;
mediaPlayer.stop();
mediaPlayer = new MediaPlayer(new Media("file:" + videoFiles[currentVideoIndex]));
mediaPlayer.setOnEndOfMedia(() -> mediaPlayer.seek(Duration.ZERO)); // 循环播放当前视频
mediaPlayer.play();
});
// 开始播放第一个视频文件
mediaPlayer.play();
// 创建一个StackPane,并将MediaPlayer的View添加到其中
StackPane root = new StackPane(mediaPlayer.getView());
// 创建一个Scene,并将StackPane添加到其中
Scene scene = new Scene(root, 800, 600);
// 设置Stage的Scene,并显示Stage
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
```
在这个例子中,我们定义了一个videoFiles数组来存储要播放的视频文件列表。在OnEndOfMedia事件中,我们使用currentVideoIndex变量来跟踪当前正在播放的视频文件,并使用模运算符来循环遍历videoFiles数组。
阅读全文