分页

小技巧

为了保证你已对服务(Service)这一概念有了基本的了解,请先保证你已了解 服务 中的内容。

PaginationService 用于把一段文本拆成离散的页面内容。这一服务提供了一个 PaginationList.Builder 用于指定页面的标题、内容、页眉、填充等属性。

分页生成器

首先我们先获取到一个 PaginationList.Builder 的实例:

import org.spongepowered.api.service.pagination.PaginationList;

PaginationList.Builder builder = PaginationList.builder();

有两种方式指定分页列表的内容:

  • 使用 Iterable<Text>

import org.spongepowered.api.text.Text;

import java.util.ArrayList;
import java.util.List;

List<Text> contents = new ArrayList<>();
contents.add(Text.of("Item 1"));
contents.add(Text.of("Item 2"));
contents.add(Text.of("Item 3"));

builder.contents(contents);

注解

如果这一 Iterable 实现了 List ,那么这一分页支持双向导航,否则只支持单向导航。

  • 使用 Text 数组

builder.contents(Text.of("Item 1"), Text.of("Item 2"), Text.of("Item 3"));

您还可以指定分页列表的各种其他组件,例如标题,页眉,页脚、填充等。下图显示了分页列表的每个部分中显示的组件。在下图中,字母 p 将作为填充字符串填充整个分页列表。

pppppppppppppppppppppppp Title pppppppppppppppppppppppp
Header
Item 1
Item 2
Item 3
...
ppppppppppppppppppppppp < 2/3 > ppppppppppppppppppppppp
Footer

为了实现之前的输出,我们可能会使用下面的生成器模式︰

builder.title(Text.of("Title"))
    .contents(Text.of("Item 1"), Text.of("Item 2"), Text.of("Item 3"))
    .header(Text.of("Header"))
    .footer(Text.of("Footer"))
    .padding(Text.of("p"));

注解

除了内容,分页列表中的所有组件都是可选的。但是,标题是强烈建议添加的。

最后,如果想要把分页列表中的内容发送至 MessageReceiver ,我们可以使用 PaginationList.Builder#sendTo(MessageReceiver) 方法。

就是这样! 回顾一下,可以使用以下代码生成功能完整的分页列表并发送到之前定义的 msgReceiver

PaginationList.builder()
    .title(Text.of("Title"))
    .contents(Text.of("Item 1"), Text.of("Item 2"), Text.of("Item 3"))
    .header(Text.of("Header"))
    .footer(Text.of("Footer"))
    .padding(Text.of("p"))
    .sendTo(msgReceiver);