Java tutorial
/* * 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); } } }); } }