由於沒有從Oracle約creating a Video Player Control for JavaFX一個偉大的教程。
您可以在JavaFX Ensemble應用程序中看到正在運行的教程播放器。
本教程包含有關合並玩家時間軸的信息。
下面是Ensemble帶有時間軸的JavaFX視頻播放器控件的屏幕截圖。
創建一個滑塊來控制MediaView位置的步驟如下:
- 創建
MediaView
和它相關的MediaPlayer
。
- 創建一個
Slider
來控制時間。
- 監聽對
Slider
的更改,並根據需要更新MediaPlayer
的位置。
- 聽取對
MediaPlayer
當前時間的更改並根據需要更新Slider
。從樣品
一些時間滑塊特定代碼片段:
// Media player
MediaPlayer mp = new MediaPlayer(new Media(MEDIA_URL));
// Time label
Label timeLabel = new Label("Time: ");
timeLabel.setMinWidth(Control.USE_PREF_SIZE);
mediaBar.getChildren().add(timeLabel);
// Time slider
timeSlider = new Slider();
HBox.setHgrow(timeSlider, Priority.ALWAYS);
timeSlider.setMinWidth(50);
timeSlider.setMaxWidth(Double.MAX_VALUE);
timeSlider.valueProperty().addListener(new InvalidationListener() {
public void invalidated(Observable ov) {
if (timeSlider.isValueChanging()) {
// multiply duration by percentage calculated by slider position
if(duration!=null) {
mp.seek(duration.multiply(timeSlider.getValue()/100.0));
}
updateValues();
}
}
});
....
protected void updateValues() {
if (playTime != null && timeSlider != null && volumeSlider != null && duration != null) {
Platform.runLater(new Runnable() {
public void run() {
Duration currentTime = mp.getCurrentTime();
playTime.setText(formatTime(currentTime, duration));
timeSlider.setDisable(duration.isUnknown());
if (!timeSlider.isDisabled() && duration.greaterThan(Duration.ZERO) && !timeSlider.isValueChanging()) {
timeSlider.setValue(currentTime.divide(duration).toMillis() * 100.0);
}
if (!volumeSlider.isValueChanging()) {
volumeSlider.setValue((int) Math.round(mp.getVolume() * 100));
}
}
});
}
}
...
mp.currentTimeProperty().addListener(new ChangeListener<Duration>() {
@Override
public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) {
updateValues();
}
});
// and also invoke updateValues when the MediaPlayer is played, paused, etc.
嗨Jewelsea感謝給了reply.I我不與你提供的解決方案以爲這兒過得我沒有提到我的問題clearly.I已經編輯我原來的question.Can你PLZ成功看看進去。再次感謝你非常多。 – aaaa 2013-03-19 12:12:50