gpt4 book ai didi

java - 有没有办法在应用程序启动时以编程方式设置特定的终端字体?

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:07 24 4
gpt4 key购买 nike

我正在开发一个用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com