You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.3 KiB
66 lines
2.3 KiB
import java.util.List;
|
|
import java.util.Scanner;
|
|
|
|
/**
|
|
* View: 所有 I/O 集中在这里,颜色常量统一管理
|
|
* 选做暗色主题:只需改 THEME_PRIMARY / THEME_SECONDARY 两个常量即可
|
|
*/
|
|
public class ConsoleView {
|
|
|
|
// ── ANSI 基础色 ──
|
|
private static final String ANSI_RESET = "\033[0m";
|
|
private static final String ANSI_GREEN = "\033[32m";
|
|
private static final String ANSI_RED = "\033[31m";
|
|
private static final String ANSI_YELLOW = "\033[33m";
|
|
private static final String ANSI_CYAN = "\033[36m";
|
|
private static final String ANSI_BOLD = "\033[1m";
|
|
|
|
// ── 选做:主题常量(暗色主题只改这两行)──
|
|
private static final String THEME_PRIMARY = ANSI_CYAN; // 暗色主题可换 ANSI_GREEN
|
|
private static final String THEME_SECONDARY = ANSI_YELLOW; // 暗色主题可换 ANSI_CYAN
|
|
|
|
private final Scanner scanner = new Scanner(System.in);
|
|
|
|
public void printSuccess(String msg) {
|
|
System.out.println(ANSI_GREEN + msg + ANSI_RESET);
|
|
}
|
|
|
|
public void printError(String msg) {
|
|
System.out.println(ANSI_RED + "[ERROR] " + msg + ANSI_RESET);
|
|
}
|
|
|
|
public void printInfo(String msg) {
|
|
System.out.println(THEME_PRIMARY + msg + ANSI_RESET);
|
|
}
|
|
|
|
public void printWarning(String msg) {
|
|
System.out.println(THEME_SECONDARY + "[WARN] " + msg + ANSI_RESET);
|
|
}
|
|
|
|
public void printBold(String msg) {
|
|
System.out.println(ANSI_BOLD + msg + ANSI_RESET);
|
|
}
|
|
|
|
/** 展示文章列表 */
|
|
public void display(List<Article> articles) {
|
|
if (articles.isEmpty()) {
|
|
printWarning("暂无文章,请先使用 crawl <url> 抓取。");
|
|
return;
|
|
}
|
|
printBold("── 文章列表 (" + articles.size() + " 篇) ──");
|
|
for (int i = 0; i < articles.size(); i++) {
|
|
Article a = articles.get(i);
|
|
if (a == null) {
|
|
printWarning((i + 1) + ". [null 条目,已跳过]");
|
|
continue;
|
|
}
|
|
System.out.printf(THEME_PRIMARY + "%2d. %s" + ANSI_RESET + "%n", i + 1, a);
|
|
}
|
|
}
|
|
|
|
/** 读取一行用户输入,显示提示符 */
|
|
public String readLine() {
|
|
System.out.print(ANSI_BOLD + "> " + ANSI_RESET);
|
|
return scanner.nextLine().trim();
|
|
}
|
|
}
|
|
|