该版本仍在开发中,尚未被视为稳定。最新稳定版本请使用Spring Shell 3.4.1spring-doc.cadn.net.cn

终端用户界面

终端用户界面是驱动用户界面执行逻辑的主要实现。spring-doc.cadn.net.cn

创建终端界面

你可以建造终端用户界面手动作,但推荐的方法是使用TerminalUIBuilder它会自动为你配置,并会设置所需的服务。spring-doc.cadn.net.cn

@Autowired
TerminalUIBuilder builder;

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

视图配置

终端用户界面有一个辅助方法配置(View),可用于设置 需要与 EventLoop 及其他服务集成。spring-doc.cadn.net.cn

TerminalUI ui;

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

运行UI循环

运行终端用户界面执行循环是一种阻塞作。你将需要 一种退出循环的方法,例如Exiting Appspring-doc.cadn.net.cn

TerminalUI ui;

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

退出应用

如果你想用正常的CTRL-Q键组合退出应用, 你需要为事件注册监听器,并请求中断执行。spring-doc.cadn.net.cn

@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();
}

模态视图

终端用户界面支持拥有一个主动的模态视图。模态视角被放置 在所有其他视图之上,并处理所有输入事件。spring-doc.cadn.net.cn

TerminalUI ui;

void sample() {
	DialogView dialog = new DialogView();
	// set modal
	ui.setModal(dialog);
	// clear modal
	ui.setModal(null);
}
因为观点不应直接了解任何信息终端界面和 接口ViewService暴露了与模态相关的功能。