/* * Function that creates a volume slider, adds the relevant event handlers to it, and * adds it to the MediaControl bar. */ void setVolumeSlider() { // Create a new volume slider volumeSlider = new Slider(); volumeSlider.setManaged(true); volumeSlider.setMaxWidth(mpWidth / 6); volumeSlider.setMinWidth(20); // Detect the change in volume slider bar and sets the MediaPlayer's volume accordingly volumeSlider .valueProperty() .addListener( new ChangeListener<Number>() { @Override public void changed( ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { if (volumeSlider.isValueChanging()) { // If the slider is being dragged set volume to that requested mp.setVolume(volumeSlider.getValue() / 100.0); } // Update the text labels to display updateValues(); } }); // Add the volume slider to MediaControl bar mediaBar.getChildren().add(volumeSlider); }
public MediaControl(final MediaPlayer mp) { this.mp = mp; setStyle("-fx-background-color: #bfc2c7;"); // TODO: Use css file mediaView = new MediaView(mp); Pane mvPane = new Pane() {}; mvPane.getChildren().add(mediaView); mvPane.setStyle("-fx-background-color: black;"); // TODO: Use css file setCenter(mvPane); mediaBar = new HBox(); mediaBar.setPadding(new Insets(5, 10, 5, 10)); mediaBar.setAlignment(Pos.CENTER_LEFT); BorderPane.setAlignment(mediaBar, Pos.CENTER); final Button playButton = new Button(); playButton.setGraphic(imageViewPlay); playButton.setOnAction( new EventHandler<ActionEvent>() { public void handle(ActionEvent e) { updateValues(); Status status = mp.getStatus(); if (status == Status.UNKNOWN || status == Status.HALTED) { // don't do anything in these states return; } if (status == Status.PAUSED || status == Status.READY || status == Status.STOPPED) { // rewind the movie if we're sitting at the end if (atEndOfMedia) { mp.seek(mp.getStartTime()); atEndOfMedia = false; playButton.setGraphic(imageViewPlay); // playButton.setText(">"); updateValues(); } mp.play(); playButton.setGraphic(imageViewPause); // playButton.setText("||"); } else { mp.pause(); } } }); mp.currentTimeProperty() .addListener( new ChangeListener<Duration>() { @Override public void changed( ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) { updateValues(); } }); mp.setOnPlaying( new Runnable() { public void run() { // System.out.println("onPlaying"); if (stopRequested) { mp.pause(); stopRequested = false; } else { playButton.setGraphic(imageViewPause); // playButton.setText("||"); } } }); mp.setOnPaused( new Runnable() { public void run() { // System.out.println("onPaused"); playButton.setGraphic(imageViewPlay); // playButton.setText("||"); } }); mp.setOnReady( new Runnable() { public void run() { duration = mp.getMedia().getDuration(); updateValues(); } }); mp.setCycleCount(repeat ? MediaPlayer.INDEFINITE : 1); mp.setOnEndOfMedia( new Runnable() { public void run() { if (!repeat) { playButton.setGraphic(imageViewPlay); // playButton.setText(">"); stopRequested = true; atEndOfMedia = true; } } }); mediaBar.getChildren().add(playButton); // Add spacer Label spacer = new Label(" "); mediaBar.getChildren().add(spacer); // 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(); } } }); mediaBar.getChildren().add(timeSlider); // Play label playTime = new Label(); playTime.setPrefWidth(130); playTime.setMinWidth(50); mediaBar.getChildren().add(playTime); // Volume label Label volumeLabel = new Label("Vol: "); volumeLabel.setMinWidth(Control.USE_PREF_SIZE); mediaBar.getChildren().add(volumeLabel); // Volume slider volumeSlider = new Slider(); volumeSlider.setPrefWidth(70); volumeSlider.setMaxWidth(Region.USE_PREF_SIZE); volumeSlider.setMinWidth(30); volumeSlider .valueProperty() .addListener( new InvalidationListener() { public void invalidated(Observable ov) {} }); volumeSlider .valueProperty() .addListener( new ChangeListener<Number>() { @Override public void changed( ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { if (volumeSlider.isValueChanging()) { mp.setVolume(volumeSlider.getValue() / 100.0); } } }); mediaBar.getChildren().add(volumeSlider); setBottom(mediaBar); }
/* * Creates a time slider, adds the relevant event handlers for it, and adds it to * the appropiate MediaControl bar. Handles both normal viewing mode, and fullscreen * mode. */ void setTimeSlider() { // Create a new time slide timeSlider = new Slider(); timeSlider.setMaxWidth((2 * mpWidth) / 3); HBox.setHgrow(timeSlider, Priority.ALWAYS); // Allow the user to drag and position the slider timeSlider .valueProperty() .addListener( new InvalidationListener() { @Override public void invalidated(Observable ov) { // If the value is changing perform an action if (timeSlider.isValueChanging()) { // If the duration of video is not null, move to requested time if (duration != null) { mp.seek(duration.multiply(timeSlider.getValue() / 100.0)); } } } }); // Allow the user to click on the slider to jump to the desired timing timeSlider.setOnMousePressed( new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent mouseEvent) { mp.seek(duration.multiply(timeSlider.getValue() / 100.0)); } }); // Create a new time slider for fullscreen mode timeSliderFS = new Slider(); timeSliderFS.setMinWidth(bounds.getWidth() - 100); timeSliderFS .valueProperty() .addListener( new InvalidationListener() { @Override public void invalidated(Observable ov) { // If the value is changing perform an action if (timeSliderFS.isValueChanging()) { // If the duration of video is not null, move to requested time if (duration != null) { mp.seek(duration.multiply(timeSliderFS.getValue() / 100.0)); } } } }); // If mouse enters time slider in fullscreen mode handle it timeSliderFS.setOnMousePressed( new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent mouseEvent) { // Stop the fade transition and move to requested time fadeTransition.stop(); mp.seek(duration.multiply(timeSliderFS.getValue() / 100.0)); } }); // Add the time slider to MediaControl bar mediaBar.getChildren().add(timeSlider); }
protected void setControls(PropDesc... properties) { GridPane grid = new GridPane(); grid.getStyleClass().add("sample-control-grid"); grid.setVgap(10); grid.setHgap(10); int row = 0; for (PropDesc property : properties) { final PropDesc prop = property; Label propName = new Label(prop.name + ":"); propName.getStyleClass().add("sample-control-grid-prop-label"); GridPane.setConstraints(propName, 0, row); grid.getChildren().add(propName); if (prop.valueModel instanceof DoubleProperty) { final Label valueLabel = new Label(twoDp.format(prop.initialValue)); GridPane.setConstraints(valueLabel, 2, row); final Slider slider = new Slider(); slider.setMin(prop.min); slider.setMax(prop.max); slider.setValue(((Number) prop.initialValue).doubleValue()); GridPane.setConstraints(slider, 1, row); slider.setMaxWidth(Double.MAX_VALUE); slider .valueProperty() .addListener( new InvalidationListener() { @Override public void invalidated(Observable ov) { set(prop.valueModel, slider.getValue()); valueLabel.setText(twoDp.format(slider.getValue())); } }); grid.getChildren().addAll(slider, valueLabel); } else { // if (prop.property.getType() == Color.class || prop.property.getType() == // Paint.class) { // FIXME we assume anything that isn't a double property is now a colour property final Rectangle colorRect = new Rectangle(20, 20, (Color) prop.initialValue); colorRect.setStroke(Color.GRAY); final Label valueLabel = new Label(formatWebColor((Color) prop.initialValue)); valueLabel.setGraphic(colorRect); valueLabel.setContentDisplay(ContentDisplay.LEFT); GridPane.setConstraints(valueLabel, 2, row); final ColorPicker colorPicker = new ColorPicker(); GridPane.setConstraints(colorPicker, 1, row); colorPicker .getColor() .addListener( new InvalidationListener() { @Override public void invalidated(Observable valueModel) { Color c = colorPicker.getColor().get(); set(prop.valueModel, c); valueLabel.setText(formatWebColor(c)); colorRect.setFill(c); } }); grid.getChildren().addAll(colorPicker, valueLabel); } row++; } controls = grid; }