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 公開了與模態相關的功能。 |