翻译自   Scroll Pane

在本章中,您将学习如何在JavaFX应用程序中构建滚动窗格。

滚动窗格提供UI元素的可滚动视图。此控件使用户可以通过平移视口或使用滚动条来滚动内容。具有默认设置和添加的图像的滚动窗格如图10-1所示。

图10-1滚动窗格

创建滚动窗格

示例10-1显示了如何在应用程序中创建此滚动窗格。

示例10-1使用滚动窗格查看图像

Image roses = new Image(getClass()。getResourceAsStream(“roses.jpg”));
ScrollPane sp = new ScrollPane();
sp.setContent(new ImageView(roses));

setContent方法定义用作此滚动窗格内容的节点。您只能指定一个节点。要创建具有多个组件的滚动视图,请使用布局容器或Group类。您还可以通过单击并移动鼠标光标来指定预览图像truesetPannable方法的值。滚动条的位置相应地改变。

设置滚动窗格的滚动条策略

ScrollPane类提供了一个政策来确定何时显示滚动条:永远,永远,或只在需要的时候。使用setHbarPolicysetVbarPolicy方法分别为水平和垂直滚动条指定滚动条策略。因此,在例10-2中,将出现垂直滚动条,而不是水平滚动条。

示例10-2设置水平和垂直滚动条策略

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

因此,您只能垂直滚动图像,如图10-2所示。

图10-2禁用水平滚动条

调整滚动窗格中的组件大小

在设计UI界面时,您可能需要调整组件的大小,以使它们与滚动窗格的宽度或高度相匹配。设置setFitToWidthsetFitToHeight方法true以匹配特定维度。

图10-3中显示的滚动窗格包含单选按钮,文本框和密码框。内容的大小超出滚动窗格的预定义大小,并显示垂直滚动条。但是,由于该setFitToWidth方法true为滚动窗格设置,因此内容的宽度会缩小,而不会水平滚动。

图10-3拟合滚动窗格的宽度

默认情况下,两者FIT_TO_WIDTHFIT_TO_HEIGHT属性都是false,,并且可调整大小的内容保持其原始大小。如果setFitToWidth从该应用程序的代码中删除方法,您将看到如图10-4所示的输出。

图10-4适合内容的默认属性

ScrollPane类允许您检索和设置当前,最小和内容最大值在水平和垂直方向。了解如何在您的应用程序中使用它们。

使用滚动窗格的示例应用程序

示例10-3使用滚动窗格显示带有图像的垂直框。该类的VVALUE属性ScrollPane有助于识别当前显示的图像并呈现图像文件的名称。

示例10-3使用滚动窗格查看图像

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"};@Overridepublic 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);}
}

编译并运行此应用程序将生成如图10-5所示的窗口。

图10-5滚动图像

垂直滚动条的最大值等于垂直框的高度。例10-4中显示的代码片段呈现当前显示的图像文件的名称。

示例10-4跟踪滚动窗格垂直值的更改

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时,结果给出imageNames数组中当前图像的索引。

在您的应用程序中,您还可以更改垂直和水平滚动条的最小值和最大值,从而动态更新用户界面。

相关的API文档 

  • ScrollPane

  • ScrollBar

JavaFX UI控件教程(十一)之Scroll Pane相关推荐

  1. JavaFX UI控件教程(二)之JavaFX UI控件

    翻译自  JavaFX UI控件 本章概述了通过API提供的JavaFX UI控件. JavaFX UI控件是使用场景图中的节点构建的.因此,控件可以使用JavaFX平台的视觉丰富功能.由于JavaF ...

  2. JavaFX UI控件教程(一)之简述

    翻译自  JavaFX UI控件概述 关于本教程 本教程介绍JavaFX API中提供的内置JavaFX UI控件. 该文件包含以下章节: JavaFX UI控件 标签 按钮 单选按钮 切换按钮 复选 ...

  3. JavaFX UI控件教程(八)之Choice Box

    翻译自   Choice Box 本章介绍了选项框,这些UI控件提供了在几个选项之间快速选择的支持. 使用ChoiceBox该类将选择框添加到JavaFX应用程序.其简单的实现如图7-1所示. 图7- ...

  4. JavaFX UI控件教程(十)之Scroll Bar

    翻译自   Scroll Bar 本章介绍如何使用滚动条控件创建可滚动窗格. 本ScrollBar类可以在应用程序中创建滚动窗格和意见.图9-1显示了滚动条的三个区域:拇指,右侧和左侧按钮(或向下和向 ...

  5. JavaFX UI控件教程(二十一)之Tooltip

    翻译自  Tooltip 在本章中,您将了解工具提示,即当鼠标光标悬停该控件时,可以为任何UI控件设置的控件. 的Tooltip类表示通常用于显示关于所述用户接口的控制附加信息的公共UI组件.可以通过 ...

  6. JavaFX UI控件教程(二十八)之UI控件的自定义

    翻译自  Customization of UI Controls 本章介绍了UI控件自定义的各个方面,并总结了Oracle提供的一些提示和技巧,以帮助您修改UI控件的外观和行为. 您可以通过应用层叠 ...

  7. JavaFX UI控件教程(二十二)之Titled Pane和Accordion

    翻译自  Titled Pane and Accordion 本章介绍如何在JavaFX应用程序中使用accordion和title窗格的组合. 标题窗格是带标题的面板.它可以打开和关闭,它可以封装任 ...

  8. JavaFX UI控件教程(二十三)之Menu

    翻译自  Menu 本章介绍如何创建菜单和菜单栏,添加菜单项,将菜单分组,创建子菜单以及设置上下文菜单. 您可以使用以下JavaFX API类在JavaFX应用程序中构建菜单. 菜单栏 菜单项 菜单 ...

  9. JavaFX UI控件教程(二十)之HTML Editor

    翻译自  HTML Editor 在本章中,您将学习如何使用嵌入式HTML编辑器编辑JavaFX应用程序中的文本. 该HTMLEditor控件是一个功能齐全的富文本编辑器.它的实现基于HTML5的文档 ...

  10. JavaFX UI控件教程(十八)之Progress Bar和Progress Indicator

    翻译自  Progress Bar and Progress Indicator 在本章中,您将了解进度指示器和进度条,以及可视化JavaFX应用程序中任何操作进度的UI控件. 本ProgressIn ...

最新文章

  1. sysdba登录不需要密码验证?
  2. python rq asyncio_Python 的异步 IO:Asyncio 简介
  3. C++中string、char *、char[]的转换
  4. ftp列表错误,flashfxp列表错误,ftp无法列目录的解决方法
  5. Ubuntu下安装FTP服务及使用(VSFTPD详细设置)(二)
  6. vue --- 使用vue在html上显示当前时间
  7. declare sql语句_SQL语句大全【第二部分】技巧+经典案例
  8. CentOS7默认的防火墙不是iptables,而是firewalle.
  9. NYOJ31 - 5个数求最值
  10. ListIterator和Iterator的区别
  11. 注解的引入以及注解的使用
  12. HTML5 video 视频标签使用介绍
  13. ansys添加力矩_ansys中施加力矩
  14. 充电头PD协议和QC协议的理解
  15. 冬天 计算机无法启动不了怎么办,每次到冬天电脑就开不了
  16. sinon spy_Sinon教程:使用嘲弄,间谍和存根进行JavaScript测试
  17. 在Linux环境下怎么编译Android源码?
  18. leapftp 注册码大全
  19. TestNG框架的环境搭建
  20. 关于java+selenium识别验证码的问题

热门文章

  1. 一般动态规划问题合集(Leetcode题解-Python语言)
  2. [mybatis]Mapper XML Files_CUD
  3. [剑指offer]面试题34:丑数
  4. 利用链表实现可合并堆(算法导论第三版思考题10-2)
  5. 数据结构与算法--我们来玩丢手绢(约瑟夫环问题)
  6. cg word List5
  7. java(i++和++i的理解)
  8. ImportError: libicui18n.so.56 and/or libicui18n.so.58 when importing cv2
  9. I. Rise of Shadows(类欧几里得)
  10. NWERC 2018 A. Access Points 二维转一维 + 单调栈