JavaFX分页
JavaFX分页控件使用户可以逐页浏览内容,例如搜索结果,文章,图像或者类似类型内容的页面。 JavaFX分页控件由类javafx.scene.control.Pagination
表示。这是JavaFXPagination
控件的屏幕截图:
全分页示例
这是第一个完整的Java代码示例,说明如何使用JavaFXPagination
控件:
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Pagination; import javafx.scene.layout.VBox; import javafx.scene.text.Font; import javafx.stage.Stage; public class PaginationExample extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("JavaFX App"); Pagination pagination = new Pagination(); pagination.setPageCount(21); pagination.setCurrentPageIndex(3); pagination.setMaxPageIndicatorCount(3); pagination.setPageFactory((pageIndex) -> { Label label1 = new Label("Content for page with index: " + pageIndex); label1.setFont(new Font("Arial", 24)); Label label2 = new Label("Main content of the page ..."); return new VBox(label1, label2); }); VBox vBox = new VBox(pagination); Scene scene = new Scene(vBox, 960, 600); primaryStage.setScene(scene); primaryStage.show(); } }
分页属性
JavaFX的Pagination控件包含一组属性,这些属性指定如何呈现Pagination控件。这些属性是:
- 页数
- 当前页面索引
- 页面指示符最大数量
页面数是用户可以浏览的页面总数。当前页面索引是用户当前正在查看的页面。页面指示符的最大数量是带有页面编号的快捷按钮的数量,用户可以单击这些快捷按钮直接导航到该页面。
这三个属性的效果在本教程前面的屏幕快照中都是可见的。这是设置所有三个属性的示例:
Pagination pagination = new Pagination(); pagination.setPageCount(21); pagination.setCurrentPageIndex(3); pagination.setMaxPageIndicatorCount(3);
分页页面工厂
JavaFX"分页"控件需要在其上设置页面工厂,以便能够正确浏览页面内容。当用户导航到新页面时,将调用页面工厂。页面工厂组件通过其setPageFactory()方法连接到Pagination控件,并且必须实现javafx.util.Callback接口。
首先是如何定义" CallBack"接口:
public interface Callback<P,R> { public R call(P param); }
在setPageFactory()方法中,两个类型参数P和R设置为Integer(P)和Node(R)。这意味着页面工厂必须实现Callback <Integer,Node>
接口。这是Callback <Integer,Node>
的实现示例:
public static class MyPageFactory implements Callback<Integer, Node> { @Override public Node call(Integer pageIndex) { return new Label("Content for page " + pageIndex); } }
传递给Callback实现的Integer参数是页面工厂应为其创建Node的页面的索引。返回的"节点"应显示具有给定页面索引的页面内容。
这是在JavaFXPagination
控件上设置页面工厂的示例:
pagination.setPageFactory(new MyPageFactory());
我们还可以使用匿名Callback
接口实现或者Java lambda表达式在Pagination
控件上设置页面工厂。这首先是一个使用匿名Callback
实现的示例:
pagination.setPageFactory(new Callback<Integer, Node>() { @Override public Node call(Integer pageIndex) { return new Label("Content for page " + pageIndex); } });
这是一个使用Java Lambda表达式设置Pagination
页面工厂的示例:
pagination.setPageFactory((pageIndex) -> { return new Label("Content for page " + pageIndex); });
甚至更短,使用更短的lambda表达式语法:
pagination.setPageFactory((pageIndex) -> new Label("Content for page " + pageIndex) );