|  
 /*
 * 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.
 *
 *  HelloEarthRiseMain.java - A JavaFX "Hello World" style example
 *
 *  Developed 2011 by James L. Weaver jim.weaver [at] javafxpert.com
 *  as a JavaFX SDK 2.0 example for the Pro JavaFX book.
 */
 //package projavafx.audioconfig.ui;
 
 import javafx.application.Application;
 import javafx.geometry.VPos;
 import javafx.scene.GroupBuilder;
 import javafx.scene.Scene;
 import javafx.scene.SceneBuilder;
 import javafx.scene.control.CheckBox;
 import javafx.scene.control.CheckBoxBuilder;
 import javafx.scene.control.ChoiceBox;
 import javafx.scene.control.ChoiceBoxBuilder;
 import javafx.scene.control.Slider;
 import javafx.scene.control.SliderBuilder;
 import javafx.scene.paint.Color;
 import javafx.scene.paint.LinearGradientBuilder;
 import javafx.scene.paint.Stop;
 import javafx.scene.shape.LineBuilder;
 import javafx.scene.shape.RectangleBuilder;
 import javafx.scene.text.Font;
 import javafx.scene.text.FontWeight;
 import javafx.scene.text.Text;
 import javafx.scene.text.TextBuilder;
 import javafx.stage.Stage;
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.IntegerProperty;
 import javafx.beans.property.SimpleBooleanProperty;
 import javafx.beans.property.SimpleIntegerProperty;
 import javafx.beans.value.ChangeListener;
 import javafx.beans.value.ObservableValue;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.scene.control.SingleSelectionModel;
 
 public class Main extends Application {
 
 // A reference to the model
 AudioConfigModel acModel = new AudioConfigModel();
 
 Text textDb;
 Slider slider;
 CheckBox mutingCheckBox;
 ChoiceBox genreChoiceBox;
 
 public static void main(String[] args) {
 Application.launch(args);
 }
 
 @Override
 public void start(Stage stage) {
 Scene scene = SceneBuilder.create()
 .width(320)
 .height(343)
 .root(
 GroupBuilder.create()
 .children(
 RectangleBuilder.create()
 .width(320)
 .height(45)
 .fill(
 LinearGradientBuilder.create()
 .endX(0.0)
 .endY(1.0)
 .stops(
 new Stop(0, Color.web("0xAEBBCC")),
 new Stop(1, Color.web("0x6D84A3"))
 )
 .build()
 )
 .build(),
 TextBuilder.create()
 .layoutX(65)
 .layoutY(12)
 .textOrigin(VPos.TOP)
 .fill(Color.WHITE)
 .text("Audio Configuration")
 .font(Font.font("SansSerif", FontWeight.BOLD, 20))
 .build(),
 RectangleBuilder.create()
 .x(0)
 .y(43)
 .width(320)
 .height(300)
 .fill(Color.rgb(199, 206, 213))
 .build(),
 RectangleBuilder.create()
 .x(9)
 .y(54)
 .width(300)
 .height(130)
 .arcWidth(20)
 .arcHeight(20)
 .fill(Color.WHITE)
 .stroke(Color.color(0.66, 0.67, 0.69))
 .build(),
 textDb = TextBuilder.create()
 .layoutX(18)
 .layoutY(69)
 .textOrigin(VPos.TOP)
 .fill(Color.web("#131021"))
 .font(Font.font("SansSerif", FontWeight.BOLD, 18))
 .build(),
 slider = SliderBuilder.create()
 .layoutX(135)
 .layoutY(69)
 .prefWidth(162)
 .min(acModel.minDecibels)
 .max(acModel.maxDecibels)
 .build(),
 LineBuilder.create()
 .startX(9)
 .startY(97)
 .endX(309)
 .endY(97)
 .stroke(Color.color(0.66, 0.67, 0.69))
 .build(),
 TextBuilder.create()
 .layoutX(18)
 .layoutY(113)
 .textOrigin(VPos.TOP)
 .fill(Color.web("#131021"))
 .text("Muting")
 .font(Font.font("SanSerif", FontWeight.BOLD, 18))
 .build(),
 mutingCheckBox = CheckBoxBuilder.create()
 .layoutX(280)
 .layoutY(113)
 .build(),
 LineBuilder.create()
 .startX(9)
 .startY(141)
 .endX(309)
 .endY(141)
 .stroke(Color.color(0.66, 0.67, 0.69))
 .build(),
 TextBuilder.create()
 .layoutX(18)
 .layoutY(154)
 .textOrigin(VPos.TOP)
 .fill(Color.web("#131021"))
 .text("Genre")
 .font(Font.font("SanSerif", FontWeight.BOLD, 18))
 .build(),
 genreChoiceBox = ChoiceBoxBuilder.create()
 .layoutX(204)
 .layoutY(154)
 .prefWidth(93)
 .items(acModel.genres)
 .build()
 )
 .build()
 )
 .build();
 
 textDb.textProperty().bind(acModel.selectedDBs.asString().concat(" dB"));
 slider.valueProperty().bindBidirectional(acModel.selectedDBs);
 slider.disableProperty().bind(acModel.muting);
 mutingCheckBox.selectedProperty().bindBidirectional(acModel.muting);
 acModel.genreSelectionModel = genreChoiceBox.getSelectionModel();
 acModel.addListenerToGenreSelectionModel();
 acModel.genreSelectionModel.selectFirst();
 
 stage.setScene(scene);
 stage.setTitle("Audio Configuration");
 stage.show();
 }
 }
 //package projavafx.audioconfig.model;
 
 
 /**
 * The model class that the AudioConfigMain class uses
 */
 class AudioConfigModel {
 /**
 * The minimum audio volume in decibels
 */
 public double minDecibels = 0.0;
 
 /**
 * The maximum audio volume in decibels
 */
 public double maxDecibels = 160.0;
 
 /**
 * The selected audio volume in decibels
 */
 public IntegerProperty selectedDBs = new SimpleIntegerProperty(0);
 
 /**
 * Indicates whether audio is muted
 */
 public BooleanProperty muting = new SimpleBooleanProperty(false);
 
 /**
 * List of some musical genres
 */
 public ObservableList genres = FXCollections.observableArrayList(
 "Chamber",
 "Country",
 "Cowbell",
 "Metal",
 "Polka",
 "Rock"
 );
 
 /**
 * A reference to the selection model used by the Slider
 */
 public SingleSelectionModel genreSelectionModel;
 
 /**
 * Adds a change listener to the selection model of the ChoiceBox, and contains
 * code that executes when the selection in the ChoiceBox changes.
 */
 public void addListenerToGenreSelectionModel() {
 genreSelectionModel.selectedIndexProperty().addListener(new ChangeListener() {
 public void changed(ObservableValue ov, Object oldValue, Object newValue) {
 int selectedIndex = genreSelectionModel.selectedIndexProperty().getValue();
 switch(selectedIndex) {
 case 0: selectedDBs.setValue(80);
 break;
 case 1: selectedDBs.setValue(100);
 break;
 case 2: selectedDBs.setValue(150);
 break;
 case 3: selectedDBs.setValue(140);
 break;
 case 4: selectedDBs.setValue(120);
 break;
 case 5: selectedDBs.setValue(130);
 }
 }
 });
 }
 }
 
 
 
 |