(翻译)第十七回 JavaFX2.0 滚动窗Scroll Pane

小编 2026-06-07 阅读:1017 评论:0
原文地址http://download.oracle.com/javafx/2.0/ui...

原文地址http://download.oracle.com/javafx/2.0/ui_controls/scrollpane.htm

 

 

滚动窗为UI元素提供了一个可以滚动查看的视图。该控件让用户可以通过移动视口或者滚动条来查看。Figure 11-1 是一个添加了图片的默认设置的滚动窗。

创建Scroll Pane

Example 11-1 演示了如何在应用中创建滚动窗。

Example 11-1 Using a Scroll Pane to View an Image

Image roses = new Image(getClass().getResourceAsStream("roses.jpg"));ScrollPane sp = new ScrollPane();sp.setNode(new ImageView(roses));

setNode 方法定义了滚动窗的结点是什么内容,可以只指定一个结点。要创建具有多个组件的滚动窗,得用布局容器或者Group类。可以为 setPannable 方法设置true值,这样当点击和移动鼠标时能预览图像,滚动条的位置也会相应改变。

为Scroll Pane设置滚动条策略

ScrollPane类提供了一种策略来决定何时显示滚动条:总是、从不、需要时( always, never,needed)。分别使用 setHbarPolicysetVbarPolicy 方法为水平滚动条和垂直滚动条指定策略。这样,Example 11-2 中的垂直滚动条会一直显示,而水平的不会显示。

 

Example 11-2 Setting the Horizontal and Vertical Scroll Bar Policies

sp.setHbarPolicy(ScrollBarPolicy.NEVER);sp.setVbarPolicy(ScrollBarPolicy.ALWAYS);

 

结果是只能垂直地滚动图片,见 Figure 11-2 .

Figure 11-2 Disabling the Horizontal Scroll Bar

(翻译)第十七回 JavaFX2.0 滚动窗Scroll Pane
Description of "Figure 11-2 Disabling the Horizontal Scroll Bar "

改变Scroll Pane中组件的大小

设计UI接口时可能需要能够改变组件的大小已让它们适合滚动窗的宽和高。为 setFitToWidthsetFitToHeight 方法设置true 值来匹配特定的方向。

Figure 11-3 中的滚动窗包含单选按钮、文本框和密码框。这些内容的大小超过了滚动窗预先定义的尺寸,所以垂直滚动条显示了出来。然而,由于setFitToWidth 方法被设为true,视窗宽度会伸缩使水平方向无滚动条。

 

Figure 11-3 Fitting the Width of the Scroll Pane

(翻译)第十七回 JavaFX2.0 滚动窗Scroll Pane
Description of "Figure 11-3 Fitting the Width of the Scroll Pane"

 

默认FIT_TO_WIDTHFIT_TO_HEIGHT 属性都是false,可改变大小的内容也保持原始大小。从上面代码移除 setFitToWidth 方法后,显示如Figure 11-4 .

Figure 11-4 Default Properties for Fitting the Content

(翻译)第十七回 JavaFX2.0 滚动窗Scroll Pane
Description of "Figure 11-4 Default Properties for Fitting the Content"

ScrollPane 类可以取回和设置内容在水平和垂直方向的当前、最小、最大值。学习怎么使用吧

使用Scroll Pane的样例程序

Example 11-3 使用滚动窗显示一个带有图片的垂直盒子。ScrollPane 类的VVALUE属性帮助辨识当然显示的图片并显示它的名称。

 

Example 11-3 Using a Scroll Pane to View Images

package scrollpanesample; import javafx.application.Application;import javafx.beans.value.ChangeListener;import javafx.beans.value.ObservableValue;import javafx.scene.Scene;import javafx.scene.control.Label;import javafx.scene.control.ScrollPane;import javafx.scene.image.Image;import javafx.scene.image.ImageView;import javafx.scene.layout.Priority;import javafx.scene.layout.VBox;import javafx.stage.Stage; public class Main extends Application {     final ScrollPane sp = new ScrollPane();    final Image[] images = new Image[5];    final ImageView[] pics = new ImageView[5];    final VBox vb = new VBox();    final Label fileName = new Label();    final String [] imageNames = new String [] {"fw1.jpg", "fw2.jpg",        "fw3.jpg", "fw4.jpg", "fw5.jpg"};     @Override    public void start(Stage stage) {        VBox box = new VBox();        Scene scene = new Scene(box, 180, 180);        stage.setScene(scene);        stage.setTitle("Scroll Pane");        box.getChildren().addAll(sp, fileName);        VBox.setVgrow(sp, Priority.ALWAYS);         fileName.setLayoutX(30);        fileName.setLayoutY(160);         for (int i = 0; i < 5; i++) {            images[i] = new Image(getClass().getResourceAsStream(imageNames[i]));            pics[i] = new ImageView(images[i]);            pics[i].setFitWidth(100);            pics[i].setPreserveRatio(true);            vb.getChildren().add(pics[i]);        }         sp.setVmax(440);        sp.setPrefSize(115, 150);        sp.setContent(vb);        sp.vvalueProperty().addListener(new ChangeListener<Number>() {            public void changed(ObservableValue<? extends Number> ov,                Number old_val, Number new_val) {                    fileName.setText(imageNames[(new_val.intValue() - 1)/100]);            }        });        stage.show();    }     public static void main(String[] args) {        launch(args);    }}

 

 Figure 11-5 是编译并运行的效果。

Figure 11-5 Scrolling Images

(翻译)第十七回 JavaFX2.0 滚动窗Scroll Pane
Description of "Figure 11-5 Scrolling Images"

垂直滚动条的最大值等于垂直盒子的高度。 Example 11-4 中的代码块显示了当前显示图片的名称。

 

Example 11-4 Tracking the Change of the Scroll Pane's Vertical Value

sp.vvalueProperty().addListener(new ChangeListener<Number>() {    public void changed(ObservableValue<? extends Number> ov,        Number old_val, Number new_val) {            fileName.setText(imageNames[(new_val.intValue() - 1)/100]);        }});

ImageView对象限制了图片高度是100点。所以, new_val.intValue() - 1 除以100的结果给出了当前图片的索引。

可以在应用中改变水平滚动条的最小值和最大值来动态更新用户接口。

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表