javaFX学习之滑块组件Slider(转载)

参考原文:DOC-03-18 滑动条(Slider) | JavaFX中文资料

javaFX应用程序中使用滑动条(Slider)来显示一个区间范围内的数据并与之交互。Slider控件由一个滑轨(Track)和一个可拖放的滑块(Thumb)组成。它也可以包括多个刻度标记(TickMark)和刻度标签(TickLabel),用于表示数值区间范围

滑块的主要组成元素

创建一个Slider

Slider slider = new Slider();

slider.setMin(0);    表示的数据的最小值

slider.setMax(100); 表示的数据的最大值

slider.setValue(40);  设置当前值

slider.setShowTickLabels(true); 是否显示刻度值

slider.setShowTickMarks(true); 是否显示刻度线

slider.setMajorTickUnit(50); 刻度Mark之间的单位距离被设置为了50

slider.setMinorTickCount(5);  每两个主刻度之间都被设置分为了5个小刻度

slider.setBlockIncrement(10); Thumb将会向点击位置的方向移动10个单元

setMin和SetMax方法分别定义了Slider所表示的数据的最小和最大值。setValue方法指定了Slider的当前值,当前值应该永远比最大值要小并且比最小值要大。在程序启动时将使用此方法来定义滑块的所在位置。setShowTickMarks和setShowTickLabels方法都需要传递Boolean型参数,它们定义了Slider的外观

 刻度的Mark和Label都被启用了。另外主刻度Mark之间的单位距离被设置为了50,而每两个主刻度之间都被设置分为了5个小刻度。你可以调用setSnapToTicks方法并设置参数值为true,这样可以使Slider所表示的值永远对齐到刻度标记之上。

setBlockIncrement方法定义了当用户点击Track时Thumb的移动距离。该值被设置为了10,也就是说每次用户点击Track时,Thumb将会向点击位置的方向移动10个单元 

 在图片展示程序中使用Slider

这个应用程序使用了3个Slider来编辑图片的渲染效果。每个Slider会调整一个特定的视觉效果:不透明度(Opacity)、棕褐色调值(SepiaTone)、缩放因子(ScalingFactor)

 带有三个Slider的程序

ImageView对象的opacity属性根据第一个名为opacityLevel的Slider的值而改变。SepiaTone效果的等级根据名为sepiaTone的Slider而改变。第三个Slider定义了图片的缩放因子,它的当前值被传给了setScaleX和setScaleY方法 

import javafx.application.Application;
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.effect.SepiaTone;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class SliderTest extends Application {

    final Slider opacityLevel = new Slider(0, 1, 1);//创建一个Slider对象
    final Slider sepiaTone = new Slider(0, 1, 1);//创建一个Slider对象
    final Slider scaling = new Slider (0.5, 1, 1);//创建一个Slider对象
    final Image image  = new Image(getClass().getResourceAsStream(
            "background1.jpg")//在类路径下引入图片
    );

    final Label opacityCaption = new Label("Opacity Level:");//透明度设置
    final Label sepiaCaption = new Label("Sepia Tone:");//棕色色调设置
    final Label scalingCaption = new Label("Scaling Factor:");//缩放因子设置

    final Label opacityValue = new Label(
            Double.toString(opacityLevel.getValue()));//透明度数值显示标签
    final Label sepiaValue = new Label(
            Double.toString(sepiaTone.getValue()));//棕色调色值数据显示标签
    final Label scalingValue = new Label(
            Double.toString(scaling.getValue()));//缩放因子值

    final static Color textColor = Color.BLUE;//蓝色
    final static SepiaTone sepiaEffect = new SepiaTone();//深褐色

    @Override
    public void start(Stage stage) {
        Group root = new Group();//节点组容器对象
        Scene scene = new Scene(root, 600, 400);//场景对象
        stage.setScene(scene);//舞台设置场景
        stage.setTitle("滑动组件标题");

        GridPane grid = new GridPane();//表格布局面板对象
        grid.setPadding(new Insets(10, 10, 10, 10));//布局对象中设置内边距
        grid.setVgap(10);//设置垂直间隙距离
        grid.setHgap(70);//设置水平间隙距离

        final ImageView cappuccino = new ImageView (image);//创建图片显示区域
        cappuccino.setEffect(sepiaEffect);//图片设置棕色特效
        GridPane.setConstraints(cappuccino, 0, 0);//表格布局器第一行第一列设置放入图片视图区域
        GridPane.setColumnSpan(cappuccino, 3);//设置图片跨三列
        grid.getChildren().add(cappuccino);//图片在表格布局器中跨三列
        scene.setRoot(grid);//场景上添加表格布局器

        opacityCaption.setTextFill(textColor);//透明度文字标签添加颜色
        GridPane.setConstraints(opacityCaption, 0, 1);//表格布局器第2行第一列添加文字标签
        grid.getChildren().add(opacityCaption);//表格容器中添加label标签对象


        opacityLevel.valueProperty().addListener((//给Slider组件对象添加事件监听器
                ObservableValue<? extends Number> ov,
                Number old_val, Number new_val) -> {//新救治改变事件回调函数
            cappuccino.setOpacity(new_val.doubleValue());//图片对象透明度值的设置
            opacityValue.setText(String.format("%.2f", new_val));//文字标签对象文本值的设置
        });

        GridPane.setConstraints(opacityLevel, 1, 1);//给透明度Slider设置在表格布局中的布局属性
        grid.getChildren().add(opacityLevel);//布局容器对象中添加文本标签对象

        opacityValue.setTextFill(textColor);//文字标签label设置颜色
        GridPane.setConstraints(opacityValue, 2, 1);//文本label对象布局到表格布局器中位置为第二行第二列
        grid.getChildren().add(opacityValue);//表格布局器中添加透明度文字标签

        sepiaCaption.setTextFill(textColor);//调色Slider对象文字颜色设置
        GridPane.setConstraints(sepiaCaption, 0, 2);//第三行第1列添加文本标签对象
        grid.getChildren().add(sepiaCaption);//文本标签添加到表格布局器中

        sepiaTone.valueProperty().addListener((//给颜色效果调制Slider对象添加值改监听器对象
                ObservableValue<? extends Number> ov, Number old_val,
                Number new_val) -> {//匿名监听器对象的创建以及监听事件处理回调函数的实现
            sepiaEffect.setLevel(new_val.doubleValue());//棕色特效值的设置
            sepiaValue.setText(String.format("%.2f", new_val));//棕色文本标签值的设置
        });
        GridPane.setConstraints(sepiaTone, 1, 2);//表格布局器中布局调色Slider对象的布局规约设置
        grid.getChildren().add(sepiaTone);//布局器中添加被布局的节点对象

        sepiaValue.setTextFill(textColor);//给文本标签添加颜色
        GridPane.setConstraints(sepiaValue, 2, 2);//约束颜色标签文本label对象的布局位置
        grid.getChildren().add(sepiaValue);//布局对象上添加label标签

        scalingCaption.setTextFill(textColor);//label标签颜色设置
        GridPane.setConstraints(scalingCaption, 0, 3);//给label元素设置在GridPane布局器上的布局位置约束
        grid.getChildren().add(scalingCaption);//grid上添加被布局的节点对象

        scaling.valueProperty().addListener((//缩放比例Slider组件交互事件监听器对象的添加
                ObservableValue<? extends Number> ov, Number old_val,
                Number new_val) -> {//监听对象的事件监听回调函数的实现
            cappuccino.setScaleX(new_val.doubleValue());//设置图片在X轴上的缩放比例
            cappuccino.setScaleY(new_val.doubleValue());//设置图片在Y轴上的缩放比例
            scalingValue.setText(String.format("%.2f", new_val));//设置缩放标签文本label显示的文字
        });
        GridPane.setConstraints(scaling, 1, 3);//设置表格布局对象在第四行第二列上面的布局约束
        grid.getChildren().add(scaling);//布局对象上添加缩放Slider组件

        scalingValue.setTextFill(textColor);//label添加颜色
        GridPane.setConstraints(scalingValue, 2, 3);//设置scalingValue对象在grid对象上的布局约定:第四行第三列
        grid.getChildren().add(scalingValue);//表格布局对象中添加缩放文字标签对象

        stage.show();//舞台展现
    }

    public static void main(String[] args) {
        launch(args);
    }
}

 ImageView对象的opacity属性根据第一个名为opacityLevel的Slider的值而改变。SepiaTone效果的等级根据名为sepiaTone的Slider而改变。第三个Slider定义了图片的缩放因子,它的当前值被传给了setScaleX和setScaleY方法

展示了将Slider类的getValue方法返回的double类型的值转换成String类型。它同时将这个值格式化成一个带有两位小数的float数字来展示Slider的值 

格式化Slider的展示值 

scalingValue.setText(String.format("%.2f", new_val)); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值