- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个用 Java 编写的基于文本的冒险游戏,我想知道是否有一种方法可以强制使用某种终端字体,以确保某些字符以一致的方式间隔“绘制”东西比如关卡 map 和 UI 元素。
从这里对 SO 的一些研究中,我发现 System.out 无法使用指定的字体,它实际上取决于最终用户的控制台/终端字体设置。
我已经实现了一个 bash 脚本来获取用户终端在启动期间当前大小的列数和行数,并将这些值写入我的 Java 代码随后读取的文件。
有没有办法通过 Java 或游戏启动脚本,让最终用户的终端在游戏加载前使用某种字体?有没有人用他们自己的基于文本的游戏处理过这类问题?是否最好只告知最终用户某种字体(等宽、无衬线)更适合获得最佳游戏体验?
最佳答案
这其实很简单。您应该做的是使用 JTextPane 或 JTextArea 创建您自己的控制台窗口,并将打印流重定向到该窗口。这是一个例子:
import javax.swing.*;
import java.awt.*;
import java.io.OutputStream;
import java.io.PrintStream;
class Example {
public static void main(String[] args) {
ConsoleWindow printWindow = new ConsoleWindow().fixPosition();
PrintStream stream = new PrintStream(new CustomOutputStream(printWindow.jTextArea));
System.setOut(stream);
System.setErr(stream);
System.out.println("This is a custom console window.");
}
}
class CustomOutputStream extends OutputStream {
private JTextArea textArea;
CustomOutputStream(JTextArea textArea) {
this.textArea = textArea;
}
@Override
public void write(int b) {
textArea.append(String.valueOf((char) b));
textArea.setCaretPosition(textArea.getDocument().getLength());
}
}
class ConsoleWindow {
private JFrame frame = new JFrame();
private JPanel panel = new JPanel();
JTextArea jTextArea = new JTextArea();
private JScrollPane jScrollPane = new JScrollPane(jTextArea);
ConsoleWindow() {
new Thread(() -> {
setupFrame();
setupPanels();
setupTextArea();
setupScrolling();
makeVisible();
}).start();
}
private void setupFrame() {
frame.setSize(854, 480);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(panel);
frame.setLayout(null);
}
private void setupPanels() {
panel.setSize(panel.getParent().getSize());
panel.setLayout(new GridLayout());
panel.add(jScrollPane);
}
private void setupTextArea() {
jTextArea.setFont(new Font("Ariel", Font.PLAIN, 20)); // TERMINAL FONT
jTextArea.setBackground(Color.BLACK); // TERMINAL COLOR
jTextArea.setForeground(Color.GREEN); // TEXT COLOR
}
private void setupScrolling() {
}
private void makeVisible() {
frame.setVisible(true);
}
ConsoleWindow fixPosition() {
jScrollPane.getHorizontalScrollBar().setValue(0);
jScrollPane.getVerticalScrollBar().setValue(0);
return this;
}
}
关于java - 有没有办法在应用程序启动时以编程方式设置特定的终端字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51677213/
这个问题已经有答案了: How do I attach events to dynamic HTML elements with jQuery? [duplicate] (8 个回答) How to
我通常从问题代码开始写 git 注释,像这样: #3533: Fixed VIB (Very Important Bug) 当我从命令行执行提交时,我写 git commit -a -m "#3533
以下命令构建我的函数并将其发布到 Azure。但它总是在 Debug模式下构建 - 如何使其切换到在 Release模式下构建? func azure functionapp publish NAME
我需要在 virtualenv 中以 sudo 身份运行 python 脚本。但是,运行 sudo python 将运行全局 python 解释器,而不是来自 virtualenv 的解释器。 有办法
我想制作一个自定义按钮并在自定义按钮类内的选择器内提供输入,但它给我一个错误消息。我该如何修复它 我在 Playground 上测试它,因为当我运行到模拟器时应用程序崩溃了。这是 Playground
我是 Angular 的新手,ng-repeat 对我不起作用。 我的第一个 ng-repeat 有效,但我使用 json 字符串的第二个无效。它提示 ng-repeat dupes 但我不明白为什么
每当麦克风听到打响指的声音时,我都会尝试加 1。 var sketch = function (p) { with(p) { var mic; va
我在 ng build --prod 时遇到堆内存不足错误,是否有任何解决方法。当 --aot=false 时它的构建很好。 有什么想法吗? 最佳答案 尝试通过以下脚本在 json 包中运行构建脚本:
我正在尝试部署一个rest api,而不涉及任何类型的UI/html 文件。我只是想让它响应一些 json 响应主体,仅此而已。我使用 spring 和 java 11。此请求在 localhost
我正在使用 Tomcat 运行一个 Java 网络应用程序,我有我的 Java 类和 .jsp 文件呈现网络。我正在尝试实现一项功能,您可以在其中搜索文件中的关键字,然后返回文件,以便用户可以从网页上
我正在尝试实现一个由 Spring 提供支持的服务器发送事件 (SSE) 网页。我的测试代码执行以下操作: 浏览器使用 EventSource(url) 连接到服务器。 Spring 接受带有以下 C
我正在使用 Visual Studio Code 中的远程 SSH 扩展连接到 Azure 中的虚拟机。问题是我不能以 root 身份 ssh,但需要 root 权限来编辑/etc 文件夹中的某些文件
我们有一个作为 Windows 服务安装的 C# 控制台应用程序。目标 64 位计算机运行的是 Windows Server 2012。我们使用了 64 位 installutil 实用程序: C:\
我的计算机上安装了 VS2010 和 VS2012,并安装了 .NET Framework 4.0,然后我将其升级到 .NET Framework 4.5。但是,我仍在开发需要在 .NET Frame
我正在使用 Express 在 NodeJs 之上用 javascript 编写 CMS。我的目标是构建我在过去几年中每天都在 .NET 中构建的东西,但现在完全是在 javascript 中构建的。
我有以下 docker-compose.yml 文件: version: "3.3" services: api: build: ./api expose: - '80
如何在将数据插入到 Db 时以 asp.net mvc4 形式自动生成 GUID 我需要将 GUID 数据类型添加到我的表中,并且需要在提交其他数据时自动插入 16 位值 最佳答案 请检查以下链接..
我正在使用时刻时区,因此我可以从选定的时区转换为客户端的时区。 我无法以比这更好的方式实现它: convertSelectedTimeZoneToClients() { let timeZon
这个问题在这里已经有了答案: Empty body in fetch POST request (5 个回答) 3年前关闭。 在我的 React 应用程序中,当我提交表单以创建新用户时,我使用 fet
ngRouteProvider依赖注入(inject)出错可能是什么原因 注意:$location依赖于ngRoute,这就是为什么我需要注入(inject)它,而我并没有真正使用它,而只是使用$lo
我是一名优秀的程序员,十分优秀!