TerminalUI

TerminalUI 是驱动UI执行逻辑的主要实现。

创建 TerminalUI

您可以手动构建TerminalUI,但推荐的方法是使用已为您自动配置的TerminalUIBuilder,它将设置所需的服务。

@Autowired
TerminalUIBuilder builder;

void sample() {
	TerminalUI ui = builder.build();
	// do something with ui
}

配置视图

TerminalUI 有一个辅助方法 configure(View),可用于将所需的集成设置到 eventloop 和其他服务中。

TerminalUI ui;

void sample() {
	BoxView view = new BoxView();
	ui.configure(view);
}

运行UI循环

运行 TerminalUI 执行循环是一个阻塞操作。您需要一种方法来退出循环,例如退出应用程序

TerminalUI ui;

void sample() {
	ui.run();
}

退出应用程序

如果您想使用正常的 CTRL-Q 组合键退出应用程序,那么您需要注册一个事件监听器并请求 中断 执行。

@Autowired
Terminal terminal;

void sample() {
	TerminalUI ui = new TerminalUI(terminal);
	BoxView view = new BoxView();
	ui.configure(view);
	ui.setRoot(view, true);
	EventLoop eventLoop = ui.getEventLoop();
	eventLoop.keyEvents()
		.subscribe(event -> {
			if (event.getPlainKey() == Key.q && event.hasCtrl()) {
				eventLoop.dispatch(ShellMessageBuilder.ofInterrupt());
			}
		});
	ui.run();
}

模态视图

TerminalUI 支持一个活动的模态视图。模态视图置于所有其他视图之上,并获取所有输入事件。

TerminalUI ui;

void sample() {
	DialogView dialog = new DialogView();
	// set modal
	ui.setModal(dialog);
	// clear modal
	ui.setModal(null);
}
由于视图不应该直接了解任何关于 TerminalUi 的信息,因此接口 ViewService 公开了与模态相关的功能。
© . This site is unofficial and not affiliated with VMware.