如何在Java控制台中使用Font类将用户输入的坐标设为加粗
控制台输入内容加粗的正确实现方式
你之前的思路有个核心误区:java.awt.Font是给Swing、AWT这类GUI图形界面组件用的,和控制台(终端)的文本渲染完全不搭边,所以用它去设置Scanner根本没用——Scanner只是负责读取用户输入的工具,本身不控制输入内容的显示样式。
要在控制台实现文本加粗,得用ANSI转义序列,这是绝大多数现代终端(Windows 10+的CMD/PowerShell、Linux/macOS终端)都支持的文本控制代码。
修改后的代码示例
import java.util.Scanner; public class WorkArea { // ANSI转义码:开启加粗样式 private static final String ANSI_BOLD = "\u001B[1m"; // ANSI转义码:重置所有样式(必须加,否则后续文本都会保持加粗) private static final String ANSI_RESET = "\u001B[0m"; public static void main(String[] args) { Scanner obj = new Scanner(System.in); for (int j = 0; j < 2; j++) { System.out.println("\nPLAYER " + (j + 1) + ", ENTER YOUR SHIPS' COORDINATES."); for (int i = 0; i < 5; i++) { System.out.println("Enter ship " + (i + 1) + " location:"); String inp = obj.nextLine(); // 把用户输入的内容加粗输出 System.out.println("You entered: " + ANSI_BOLD + inp + ANSI_RESET); String[] arrOfStr = inp.split(" "); int x = Integer.parseInt(arrOfStr[0]); int y = Integer.parseInt(arrOfStr[1]); } } obj.close(); } }
额外说明
- 输入过程中实时加粗:如果想让用户输入字符时就实时显示为加粗,需要更复杂的终端控制逻辑,或者使用第三方库(比如JLine),但对于你的战舰游戏场景,读取后再输出加粗内容已经足够满足需求。
- 旧版Windows CMD兼容:如果用的是Windows 10之前的CMD,默认不支持ANSI转义码,需要先通过命令
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1开启支持,或者换用PowerShell、Windows Terminal这类终端。 - 无需自定义Scanner的Font方法:
Scanner本身不负责终端显示,所以完全没必要给它加setFont/getFont方法,这属于找错了处理对象。
内容的提问来源于stack exchange,提问作者Priyadhanam Priyadhanam
相关产品推荐
相关产品推荐

