balance, rate, volume Slider;
/*
* Copyright (c) 2011, Pro JavaFX Authors
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of JFXtras nor the names of its contributors may be used
* to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* CodeMonkeyToDo.java - A more complex example of using the AudioClip class.
*
*/
//package projavafx.codemonkeytodo;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Hyperlink;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.media.AudioClip;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
/**
* @author Dean Iverson
*/
public class Main extends Application {
private final AudioClip coffeeClip;
private final AudioClip jobClip;
private final AudioClip meetingClip;
private Slider volumeSlider;
private Slider rateSlider;
private Slider balanceSlider;
public static void main(String[] args) {
Main.launch(args);
}
public Main() {
coffeeClip = new AudioClip(getClipResourceString("resources/coffee.mp3"));
jobClip = new AudioClip(getClipResourceString("resources/job.mp3"));
meetingClip = new AudioClip(getClipResourceString("resources/meeting.mp3"));
}
@Override
public void start(Stage primaryStage) {
final GridPane grid = new GridPane();
grid.setPadding(new Insets(10));
grid.setHgap(10);
grid.setVgap(5);
createControls(grid);
createClipList(grid);
final Scene scene = new Scene(grid, 640, 380);
scene.getStylesheets().add(getClass().getResource("media.css").toString());
primaryStage.setTitle("AudioClip Example");
primaryStage.setScene(scene);
primaryStage.show();
}
private void createControls(GridPane grid) {
final Label volumeLabel = new Label("Volume");
final Label rateLabel = new Label("Rate");
final Label balanceLabel = new Label("Balance");
GridPane.setHalignment(volumeLabel, HPos.CENTER);
GridPane.setHalignment(rateLabel, HPos.CENTER);
GridPane.setHalignment(balanceLabel, HPos.CENTER);
volumeSlider = new Slider(0.0, 1.0, 1.0);
rateSlider = new Slider(0.25, 2.5, 1.0);
balanceSlider = new Slider(-1.0, 1.0, 0.0);
GridPane.setHgrow(volumeSlider, Priority.ALWAYS);
GridPane.setHgrow(rateSlider, Priority.ALWAYS);
GridPane.setHgrow(balanceSlider, Priority.ALWAYS);
grid.add(volumeLabel, 0, 2);
grid.add(volumeSlider, 0, 3);
grid.add(rateLabel, 1, 2);
grid.add(rateSlider, 1, 3);
grid.add(balanceLabel, 2, 2);
grid.add(balanceSlider, 2, 3);
}
private void createClipList(GridPane grid) {
final VBox vbox = new VBox(30);
vbox.setAlignment(Pos.TOP_CENTER);
final Label clipLabel = new Label("Code Monkey To-Do List:");
clipLabel.setId("clipLabel");
final Button getUpButton = new Button("Get Up, Get Coffee");
getUpButton.setPrefWidth(300);
getUpButton.setOnAction(createPlayHandler(coffeeClip));
final Button goToJobButton = new Button("Go to Job");
goToJobButton.setPrefWidth(300);
goToJobButton.setOnAction(createPlayHandler(jobClip));
final Button meetingButton = new Button("Have Boring Meeting");
meetingButton.setPrefWidth(300);
meetingButton.setOnAction(createPlayHandler(meetingClip));
final Hyperlink link = new Hyperlink("About Code Monkey...");
link.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
WebView wv = new WebView();
wv.getEngine().load("http://www.jonathancoulton.com/2006/04/14/" +
"thing-a-week-29-code-monkey/");
Scene scene = new Scene(wv, 720, 480);
Stage stage = new Stage();
stage.setTitle("Code Monkey");
stage.setScene(scene);
stage.show();
}
});
vbox.getChildren().addAll(clipLabel, getUpButton, goToJobButton,
meetingButton, link);
GridPane.setHalignment(vbox, HPos.CENTER);
GridPane.setHgrow(vbox, Priority.ALWAYS);
GridPane.setVgrow(vbox, Priority.ALWAYS);
grid.add(vbox, 0, 0, GridPane.REMAINING, 1);
}
private String getClipResourceString(String clipName) {
return getClass().getResource(clipName).toString();
}
private EventHandler<ActionEvent> createPlayHandler(final AudioClip clip) {
return new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
clip.play(volumeSlider.getValue(), balanceSlider.getValue(),
rateSlider.getValue(), 0, 0);
}
};
}
}
Related examples in the same category