jframe 播放视频
时间: 2023-07-13 15:20:35 浏览: 40
要在JFrame中播放视频,你可以使用Java内置的Swing组件和第三方的开源库,比如VLCJ或者JavaFX。
下面是使用JavaFX播放视频的示例代码:
```java
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.util.Duration;
import javax.swing.*;
import java.awt.*;
import java.io.File;
public class VideoPlayer {
private final JFrame frame;
private final JFXPanel fxPanel;
private MediaPlayer mediaPlayer;
public VideoPlayer() {
frame = new JFrame("Video Player");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fxPanel = new JFXPanel();
frame.add(fxPanel, BorderLayout.CENTER);
frame.setSize(640, 480);
frame.setVisible(true);
Platform.runLater(this::initFX);
}
private void initFX() {
Media media = new Media(new File("path/to/your/video.mp4").toURI().toString());
mediaPlayer = new MediaPlayer(media);
mediaPlayer.setOnReady(() -> {
int videoWidth = mediaPlayer.getMedia().getWidth();
int videoHeight = mediaPlayer.getMedia().getHeight();
fxPanel.setPreferredSize(new Dimension(videoWidth, videoHeight));
frame.pack();
});
mediaPlayer.setOnEndOfMedia(() -> mediaPlayer.seek(Duration.ZERO));
MediaControl mediaControl = new MediaControl(mediaPlayer);
fxPanel.setScene(new javafx.scene.Scene(mediaControl));
}
public static void main(String[] args) {
SwingUtilities.invokeLater(VideoPlayer::new);
}
}
class MediaControl extends javafx.scene.layout.BorderPane {
private final MediaPlayer mediaPlayer;
private final javafx.scene.control.Slider timeSlider;
public MediaControl(MediaPlayer mediaPlayer) {
this.mediaPlayer = mediaPlayer;
timeSlider = new javafx.scene.control.Slider();
timeSlider.setPrefWidth(400);
timeSlider.setMaxWidth(Double.MAX_VALUE);
timeSlider.valueProperty().addListener(observable -> {
if (timeSlider.isValueChanging()) {
mediaPlayer.seek(Duration.seconds(timeSlider.getValue()));
}
});
mediaPlayer.currentTimeProperty().addListener((observable, oldValue, newValue) -> {
if (!timeSlider.isValueChanging()) {
timeSlider.setValue(newValue.toSeconds());
}
});
setBottom(timeSlider);
}
}
```
这个例子中,我们使用JavaFX来播放视频,并将视频嵌入到一个Swing的JFXPanel组件中,然后添加到JFrame中。同时,我们还添加了一个MediaControl控件,用于控制视频的播放进度。你可以根据实际需求自定义控件的样式和功能。