分页
小技巧
为了保证你已对服务(Service)这一概念有了基本的了解,请先保证你已了解 服务 中的内容。
PaginationService 用于把一段文本拆成离散的页面内容。这一服务提供了一个 PaginationList.Builder 用于指定页面的标题、内容、页眉、填充等属性。这是一项 Sponge 特有特性,
分页生成器
首先我们先获取到一个 PaginationList.Builder
的实例:
import org.spongepowered.api.service.pagination.PaginationList;
PaginationList.Builder builder = PaginationList.builder();
有两种方式指定分页列表的内容:
使用
Iterable<Component>
import net.kyori.adventure.text.Component; import java.util.ArrayList; import java.util.List; List<Component> contents = new ArrayList<>(); contents.add(Component.text("Item 1")); contents.add(Component.text("Item 2")); contents.add(Component.text("Item 3")); builder.contents(contents);备注
如果这一
Iterable
实现了List
,那么这一分页支持双向导航,否则只支持单向导航。
使用
Component
数组
builder.contents(Component.text("Item 1"), Component.text("Item 2"), Component.text("Item 3"));
您还可以指定分页列表的各种其他组件,例如标题,页眉,页脚、填充等。下图显示了分页列表的每个部分中显示的组件。在下图中,字母 p 将作为填充字符串填充整个分页列表。
pppppppppppppppppppppppp Title pppppppppppppppppppppppp
Header
Item 1
Item 2
Item 3
...
ppppppppppppppppppppppp < 2/3 > ppppppppppppppppppppppp
Footer
为了实现之前的输出,我们可能会使用下面的生成器模式︰
builder.title(Component.text("Title"))
.contents(Component.text("Item 1"), Component.text("Item 2"), Component.text("Item 3"))
.header(Component.text("Header"))
.footer(Component.text("Footer"))
.padding(Component.text("p"));
备注
除了内容,分页列表中的所有组件都是可选的。但是,标题是强烈建议添加的。
最后,要将分页列表发送给玩家或另一个 :javadoc:`Audience' 类对象,请使用 :javadoc:`PaginationList.Builder#sendTo(Audience)` 。
就是这样! 回顾一下,可以使用以下代码生成功能完整的分页列表并发送到之前定义的 msgReceiver
:
PaginationList.builder()
.title(Component.text("Title"))
.contents(Component.text("Item 1"), Component.text("Item 2"), Component.text("Item 3"))
.header(Component.text("Header"))
.footer(Component.text("Footer"))
.padding(Component.text("p"))
.sendTo(msgReceiver);