JavaFX是一种用于开发跨平台图形用户界面的Java语言库,它提供了一种简单而强大的方法来创建和处理用户界面。它也提供了一种有效的方法来处理分页,以便在用户界面中显示大量数据。
JavaFX中的分页处理是通过使用Pagination控件来实现的。Pagination控件允许开发人员将大量数据分割成小块,然后将其显示在不同的页面上。这样,用户就可以通过单击不同的页面来浏览所有数据。
使用Pagination控件时,开发人员必须实现PageFactory接口,该接口允许开发人员为不同的页面定义不同的内容。PageFactory接口包含一个createPage()方法,该方法允许开发人员为特定页面创建Node对象(Node对象是JavaFX中表示UI元素的对象)。
public interface PageFactory { public Node createPage(int pageIndex); }
此外,Pagination还有一个setPageFactory()方法,该方法允许开发人员将PageFactory对象传递到Pagination对象中。当用户单击不同的页时,Pagination会使用PageFactory对象来生成相应的Node对象并显示在UI上。
public void setPageFactory(PageFactory pageFactory) { this.pageFactory = pageFactory; }
因此,使用JavaFX中的Pagination控件可以很容易地处理大量数据并将其拆分为小块并显示在不同的UI上。此外,使用PageFactory也能很好地帮助开发人员为特定页生成Node对象并放在UI上。
分页控件用于浏览多个页面。 我们典型地使用对网页的分页控制,例如博客。 在博客页面的底部,我们可以看到一个矩形区域,作为一个数字列表来指示页面索引,以及一个下一个/上一个按钮来链接到下一个/上一个页面。
分页控件由页面内容和页面导航区域组成。
创建具有不确定页计数和当前页索引等于零的分页控件
Pagination pagination1 = new Pagination();
要创建一个5页的分页控件,当前页索引等于零
Pagination pagination2 = new Pagination(5);
要创建一个5页的分页控件,当前所选索引等于2
Pagination pagination3 = new Pagination(5, 2);
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Pagination; import javafx.scene.control.Hyperlink; import javafx.scene.control.Label; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { private Pagination pagination; public static void main(String[] args) throws Exception { launch(args); } public int itemsPerPage() { return 8; } public VBox createPage(int pageIndex) { VBox box = new VBox(5); int page = pageIndex * itemsPerPage(); for (int i = page; i < page + itemsPerPage(); i++) { VBox element = new VBox(); Hyperlink link = new Hyperlink("Item " + (i + 1)); link.setVisited(true); Label text = new Label("Search resultsnfor " + link.getText()); element.getChildren().addAll(link, text); box.getChildren().add(element); } return box; } @Override public void start(final Stage stage) throws Exception { pagination = new Pagination(28, 0); pagination.setStyle("-fx-border-color:red;"); pagination.setPageFactory((Integer pageIndex) -> createPage(pageIndex)); AnchorPane anchor = new AnchorPane(); AnchorPane.setTopAnchor(pagination, 10.0); AnchorPane.setRightAnchor(pagination, 10.0); AnchorPane.setBottomAnchor(pagination, 10.0); AnchorPane.setLeftAnchor(pagination, 10.0); anchor.getChildren().addAll(pagination); Scene scene = new Scene(anchor); stage.setScene(scene); stage.setTitle("PaginationSample"); stage.show(); } }
上面的代码生成以下结果。
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Pagination; import javafx.scene.control.TextArea; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class Main extends Application { private Pagination pagination; final String[] textPages = new String[]{ "this is a test 1", "this is a test 2", "this is a test 3", "this is a test 4", "this is a test 5", "this is a test 6", "this is a test 7", "this is a test 8", "this is a test 8", }; public static void main(String[] args) throws Exception { launch(args); } public int itemsPerPage() { return 1; } public VBox createPage(int pageIndex) { VBox box = new VBox(5); int page = pageIndex * itemsPerPage(); for (int i = page; i < page + itemsPerPage(); i++) { TextArea text = new TextArea(textPages[i]); text.setWrapText(true); box.getChildren().add(text); } return box; } @Override public void start(final Stage stage) throws Exception { pagination = new Pagination(28, 0); pagination.setPageFactory((Integer pageIndex) -> { if (pageIndex >= textPages.length) { return null; } else { return createPage(pageIndex); } }); AnchorPane anchor = new AnchorPane(); AnchorPane.setTopAnchor(pagination, 10.0); AnchorPane.setRightAnchor(pagination, 10.0); AnchorPane.setBottomAnchor(pagination, 10.0); AnchorPane.setLeftAnchor(pagination, 10.0); anchor.getChildren().addAll(pagination); Scene scene = new Scene(anchor, 400, 250); stage.setScene(scene); stage.setTitle("PaginationSample"); stage.show(); } }
上面的代码生成以下结果。
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Pagination; import javafx.scene.control.Label; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.VBox; import javafx.scene.text.Font; import javafx.stage.Stage; public class Main extends Application { private Pagination pagination; String[] fonts = new String[]{}; public static void main(String[] args) throws Exception { launch(args); } public int itemsPerPage() { return 15; } public VBox createPage(int pageIndex) { VBox box = new VBox(5); int page = pageIndex * itemsPerPage(); for (int i = page; i < page + itemsPerPage(); i++) { Label font = new Label(fonts[i]); box.getChildren().add(font); } return box; } @Override public void start(final Stage stage) throws Exception { fonts = Font.getFamilies().toArray(fonts); pagination = new Pagination(fonts.length/itemsPerPage(), 0); pagination.setPageFactory((Integer pageIndex) -> createPage(pageIndex)); AnchorPane anchor = new AnchorPane(); AnchorPane.setTopAnchor(pagination, 10.0); AnchorPane.setRightAnchor(pagination, 10.0); AnchorPane.setBottomAnchor(pagination, 10.0); AnchorPane.setLeftAnchor(pagination, 10.0); anchor.getChildren().addAll(pagination); Scene scene = new Scene(anchor, 400, 450); stage.setScene(scene); stage.show(); } }
上面的代码生成以下结果。
Java脚本教程 -Java脚本NashornNashorn是JVM上的ECMAScript 5.1规范的运行时实现。Nashorn是100%符合ECMAScript 5.1。使用Nasho...
Java脚本教程 - Java脚本语言使用包全局对象Nashorn将所有Java包都定义为名为 Packages 的全局变量的属性。 例如, java.lang 和...
Java脚本教程 -Java脚本运算符Nashorn的运算符列表:OperatorSyntax ++++i i++----i i--deletedelete propvoidvoid exprtypeofty...
Java教程 -Java浮点类型float类型 float 类型表示单精度数字。 float 类型变量在需要一个分数组件时很有用。下面是一些浮动变量...