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) );

