滑塊可以顯示和與一系列數(shù)值進行交互。
滑塊控件有兩件事:一個軌道和一個可拖動的拇指。
在軌道上,我們可以選擇包括指示范圍的數(shù)值的刻度線和標(biāo)簽。
以下代碼顯示了如何創(chuàng)建一個滑塊,其范圍(或范圍)從0到1,而值的默認(rèn)值為.5
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Slider; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root, 600, 400); stage.setScene(scene); stage.setTitle("Slider Sample"); Slider slider = new Slider(0, 1, 0.5); root.getChildren().add(slider); stage.show(); } public static void main(String[] args) { launch(args); } }
上面的代碼生成以下結(jié)果。
以下代碼使用默認(rèn)的空構(gòu)造函數(shù)創(chuàng)建一個Slider,然后設(shè)置滑塊控件的值。
setMin和setMax分別定義滑塊上的最小值和最大值。
setValue方法設(shè)置滑塊的當(dāng)前值。并且當(dāng)前值應(yīng)該小于最大值和大于最小值。setValue方法在軌道上移動縮略圖。
Slider slider = new Slider(); slider.setMin(0); slider.setMax(200); slider.setValue(140);
setShowTickMarks和setShowTickLabels定義滑塊的視覺外觀。并啟用標(biāo)記和標(biāo)簽。
slider.setShowTickLabels(true); slider.setShowTickMarks(true);
主要刻度標(biāo)記之間的單位距離通過setMajorTickUnit方法設(shè)置為50。
通過setMinorTickCount方法將任意兩個主刻度之間的次刻度數(shù)指定為5。
setSnapToTicks方法保持滑塊的值與刻度標(biāo)記對齊。
setBlockIncrement方法定義當(dāng)用戶點擊軌道時拇指移動的距離。
slider.setMajorTickUnit(50); slider.setMinorTickCount(5); slider.setBlockIncrement(10);
具有自定義刻度標(biāo)記和刻度標(biāo)記標(biāo)簽的滑塊,其也跨度從0到1
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Slider; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root, 600, 400); stage.setScene(scene); stage.setTitle("Slider Sample"); Slider slider = new Slider(0, 1, 0.5); slider.setShowTickMarks(true); slider.setShowTickLabels(true); slider.setMajorTickUnit(0.25f); slider.setBlockIncrement(0.1f); root.getChildren().add(slider); stage.show(); } public static void main(String[] args) { launch(args); } }
上面的代碼生成以下結(jié)果。
滑塊值屬性更改監(jiān)聽器
import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Slider; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class Main extends Application { final Slider opacityLevel = new Slider(0, 1, 1); final Label opacityCaption = new Label("Opacity Level:"); final Label opacityValue = new Label(Double.toString(opacityLevel.getValue())); @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root, 600, 400); stage.setScene(scene); stage.setTitle("Slider Sample"); GridPane grid = new GridPane(); grid.setPadding(new Insets(10, 10, 10, 10)); grid.setVgap(10); grid.setHgap(70); scene.setRoot(grid); GridPane.setConstraints(opacityCaption, 0, 1); grid.getChildren().add(opacityCaption); opacityLevel.valueProperty().addListener(new ChangeListener<Number>() { public void changed(ObservableValue<? extends Number> ov, Number old_val, Number new_val) { System.out.println(new_val.doubleValue()); opacityValue.setText(String.format("%.2f", new_val)); } }); GridPane.setConstraints(opacityLevel, 1, 1); grid.getChildren().add(opacityLevel); GridPane.setConstraints(opacityValue, 2, 1); grid.getChildren().add(opacityValue); stage.show(); } public static void main(String[] args) { launch(args); } }
上面的代碼生成以下結(jié)果。
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); } }; } }
更多建議: