我正在我们的旧Java Swing应用程序之一中更正字体显示。
在运行时使用“ -Dfile.encoding = UTF-8”选项后,其中的内容已更改。
FontClass.jar是我的示例jar文件。
option 1:
javaw -Xmx256M -jar -Dfile.encoding=UTF-8 "FontClass.jar"
option 2:
javaw -Xmx256M -jar "FontClass.jar"
使用选项1:我得到等宽显示
使用选项2:我得到非等宽显示。
局限性:
i)-Dfile.encoding = UTF-8我们添加了此选项,以使所有流都支持UTF-8。
而不是手动修改每个流。
ii)我们在许多地方都使用java摆动框架。我们是默认字体。
改变所有这些都是很多工作。
所以现在我的问题是,有没有命令行选项可用于显示选项1的等宽线显示:
下面是示例代码:
class Show extends Frame {
FontMetrics fontM;
String outString;
Show(String target, String title, Font font) {
setTitle(title);
outString = target;
fontM = getFontMetrics(font);
setFont(font);
int size = 0;
for (int i = 0; i < outString.length(); i++) {
size += fontM.charWidth(outString.charAt(i));
}
size += 24;
setSize(size, fontM.getHeight() + 60);
setLocation(getSize().width / 2, getSize().height / 2);
setVisible(true);
}
public void paint(Graphics g) {
Insets insets = getInsets();
int x = insets.left;
int y = insets.top;
g.drawString(outString, x + 6, y + fontM.getAscent() + 14);
}
}
public class Fontclass {
public static void main(String[] args) {
String jaString = new String("\u65e5\u672c\u8a9e\u6587\u5b57\u5217");
String inputString = "\niiii\naaaaiiii";
String displayString = jaString + " " + inputString;
Font font;
font = new Font("Courier",3, 24);
new Show(displayString, "Demo",font);
}
}
最佳答案
从FontMetrics
API(它用charWidth()
定义了进阶)中,“请注意,String
的进阶不一定是其字符的进阶之和。”此外,名为"Courier"
的字体可以是等宽字体,但可能与Font.MONOSPACED
指定的字体不同。
而是使用TextLayout
导出所需的几何图形,如here,here和here所示。
关于java - 等宽和UTF8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16352759/