我可以用 picocli 做可滚动的结果吗?

问题描述

我想知道我是否可以使用 picocli 应用程序实现可滚动的结果。 示例:

GetTracks

输出结果列表

>TrackA 
 TrackB
 TrackC

用户可以向上或向下滚动并选择他想要的曲目? 我想知道 picocli 是否可以实现此功能

解决方法

不幸的是没有,picocli 只处理如何解析命令参数并将其表示给程序员。任何进一步的菜单都需要由您(程序员)来处理。您可以使用简单的数字输入工作流程来制作类似的东西。用户在此处输入所需菜单项的编号:

>>> GetTracks

1 ) Track 1
2 ) Track 2
3 ) Track 3

select a track:

您可以利用 lanterna 之类的库来生成您正在寻找的此工作流程。一个非常简单的实现可能如下所示:

public class OutputChar {

    public static void main(String[] args) throws IOException {
        Terminal terminal = new DefaultTerminalFactory().createTerminal();
        Screen screen = new TerminalScreen(terminal);
        TextGraphics graphics = screen.newTextGraphics();

        screen.startScreen();
        screen.clear();

        graphics.putString(0,"Track 1");
        graphics.putString(0,1,"Track 2");
        graphics.putString(0,2,"Track 3");
        screen.refresh();

        int selectedTrack = 0;
        KeyStroke stroke = screen.readInput();

        if (stroke instanceof MouseAction) {
            MouseAction action = (MouseAction) stroke;
            MouseActionType actionType = action.getActionType();
            switch (actionType) {
                case MouseActionType.SCROLL_UP: selectedTrack++;
                        break;

                case MouseActionType.SCROLL_DOWN: selectedTrack--;
                        break;
            }
        }
        
        screen.stopScreen();
    }

}

以上示例将从键盘或鼠标读取单个输入,并根据滚动方向更改所选轨道。您将需要进行更多的逻辑和工作流程控制(以纠正一些非常明显的错误),但如果您决定沿着这条路走下去,这应该可以帮助您入门。